日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++11系列学习之三----array/valarray

發布時間:2023/12/10 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++11系列学习之三----array/valarray 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創建數組,是程序設計中必不可少的一環。我們一般可以有以下幾種方法來創建數組。

一、C++內置數組

數組大小固定,速度較快

通用格式是:數據類型 ? 數組名[ 數組大小 ];

如 int a[40];//一維數組

? int a[5][10];//二維數組

二、vector創建數組

包含多種通用算法

長度可變,使用靈活,但效率稍低

vector是使用 new 和 delete 來管理內存的

#include <iostream> #include <vector> using namespace std; int main() {int n;cin >> n;vector<string> colors(n);cout << "array colors's length is " << colors.size();vector<int> weekdays;weekdays.push_back(2);system("pause");return 0;}三、array

array 數組模板 ,在C++11中才支持

通用格式:array<類型名, 元素個數> ?數組名;

注意,因為長度固定,這里的元素個數不能是變量。

長度固定,提供了更好、更安全的接口,執行效率和內置數組相同,可以有效替代內置數組

<pre name="code" class="cpp">include <iostream> #include <array> using namespace std;void main() {//-----------------------------------------------//--這是1維數組array<int, 5> myarray = { 1, 2, 3, 4, 5 };array<int, 5> m=myarray;//支持賦值array<int, 5> m2(myarray);//支持用一個數組去初始化另一個數組-----------------------------------------------//cout << "myarray=" << endl;//for (size_t n = 0; n < myarray.size(); n++){// cout << myarray[n] << '\t';//} }

四、valarray

valarray 面向數值計算的數組,在C++11中才支持

支持很多數值數組操作,如求數組總和、最大數、最小數等。

需要頭文件 valarray 支持

#include <iostream> #include <valarray> using namespace std;int main() {valarray<int> a;//長度為0valarray<double> g(10);//長度為10valarray<int> hh(a);hh = a;valarray<float> h(3.14, 10);//長度為10,每個元素為3.14int days[10]= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };valarray<int> b(days, 5);//長度為5,用數組初始化valarraycout << b.sum() << endl;//總和cout << b.max() << endl;//最大值cout << b.min() << endl;//最小值return 0; }

五、調用第三方庫,如Eigen中的

MatrixXf a(10,15); VectorXf b(30);

下面我們重點談一下array的用法。

Array 是一種大小固定的順序容器。array 的申明:

template <class T, size_t N> class array;

<pre name="code" class="cpp">#include <iostream> #include <array> using namespace std;int main () {//-----------------------------------------------//--這是1維數組array<int,5> myarray={1,2,3,4,5};//-----------------------------------------------cout <<"myarray="<<endl;for (size_t n=0; n<myarray.size(); n++){cout << myarray[n] <<'\t';}cout << endl;//-----------------------------------------------//當然也可以使用cout <<"myarray="<<endl;for (size_t n=0; n<myarray.size(); n++){cout << myarray.at(n) << '\t';}cout << endl;//-----------------------------------------------//--這是2維數組,共3行2列array<array<int,2>,3 > myarray2D={1,2,3,4,5,6};//-----------------------------------------------cout <<"myarray2D="<<endl;for (size_t m=0; m<myarray2D.size(); m++){for (size_t n=0; n<myarray2D[m].size(); n++){ cout << myarray2D[m][n] <<'\t';} cout << endl; }cout << endl;//-----------------------------------------------return 0; }


下面我們將介紹array的幾個函數:

// ‘[]’ 操作 #include <iostream> #include <array>int main() {std::array<int, 10> myarray;unsigned int i;// assign some values:for (i = 0; i < 10; i++) myarray[i] = i * 10;// print contentstd::cout << "myarray contains:";for (int &i : myarray)std::cout << " " << i;std::cout << std::endl;return 0; }結果:

myarray contains: 0 10 20 30 40 50 60 70 80 90 請按任意鍵繼續. . .
// data 成員函數:返回指向array第一個元素的指針 #include <iostream> #include <cstring> #include <array>int main() {const char* cstr = "Test string";std::array<char, 12> charray;memcpy(charray.data(), cstr, 12);std::cout << charray.data() << std::endl;return 0; }結果:

Test string 請按任意鍵繼續. . .


// fill 函數,設置array內部的所有元素為指定值 #include <iostream> #include <array>int main() {std::array<int, 6> myarray;myarray.fill(5);std::cout << "myarray contains:";for (int& x : myarray) { std::cout << " " << x; }std::cout << std::endl;return 0; }
結果:

myarray contains: 5 5 5 5 5 5 請按任意鍵繼續. . . // swap 函數:交換兩個array的內容,注意兩個array必須是相同類型,相同大小 #include <iostream> #include <array>int main() {std::array<int, 5> first = { 10, 20, 30, 40, 50 };std::array<int, 5> second = { 11, 22, 33, 44, 55 };first.swap(second);std::cout << "first:";for (int& x : first) std::cout << " " << x;std::cout << std::endl;std::cout << "second:";for (int& x : second) std::cout << " " << x;std::cout << std::endl;return 0; }

結果:

first: 11 22 33 44 55 second: 10 20 30 40 50 請按任意鍵繼續. . .下面我們再說說以上array、vector、valarray的區別。

本質上,vector與valarray是相同的,基本上將vector換成valarray即可。無非是valarray側重于數值運算,因此增加了max,min,sum等函數。

而array與內置數組很接近,它的個數是事先給定的,不能更改。只不過是array更容易操作而已,也不用管理內存。

比如:我們想要動態創建二維數組,vector可以,但array不可以。

// swap 函數:交換兩個array的內容,注意兩個array必須是相同類型,相同大小 #include <iostream> #include <array> #include <vector> using namespace std; int main() {int m = 5, n = 6;std::array < array<int, 5>, 6 > a ;vector<vector <int> > ivec;ivec.resize(m, vector<int>(n));return 0; }
當我們將 std::array < array<int, 5>, 6 > a ;換成

std::array < array<int, m>, n > a ;出錯。


總結

以上是生活随笔為你收集整理的C++11系列学习之三----array/valarray的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 乱短篇艳辣500篇h文最新章节 | 999综合网 | 六月天婷婷 | 伊人黄网 | 久久久国产精品人人片 | 成人av动漫在线观看 | 国模在线视频 | 中文字字幕在线观看 | av导航网站 | 污污av | 国产精品情侣呻吟对白视频 | 国产黄色片在线播放 | 热の国产| 免费的av在线 | 亚洲天堂男 | 欧美在线另类 | av导航福利 | 免费20分钟超爽视频 | 青青草成人影视 | 国内自拍偷拍网 | 在线伊人网| 亚洲欧美视频一区 | 国产网红在线观看 | jjzz日本视频 | 欧美一级特黄视频 | 一二三四区在线 | 麻豆视频国产精品 | 亚洲中文一区二区三区 | 亚洲国产精品成人综合色在线婷婷 | 色婷婷av在线 | 欧美少妇bbw | 久久网址 | 99热一区二区三区 | 精品国产av鲁一鲁一区 | 在线免费观看视频你懂的 | 四虎影视成人永久免费观看亚洲欧美 | 免费黄网站在线 | 一级aaa毛片| 日韩 欧美 综合 | 风流还珠之乱淫h文 | 在线免费黄色片 | 精品无码国产污污污免费网站 | 国产午夜在线视频 | 日韩成人动漫在线观看 | 国产精品主播一区二区 | 日韩欧美三级在线观看 | 日韩专区视频 | 日韩一区欧美二区 | 日本三级吃奶头添泬 | 国产高潮久久久 | 女同性恋一区二区三区 | 久久国产露脸精品国产 | 好吊色免费视频 | 国产三级国产精品国产专区50 | 快灬快灬一下爽69 | 性生交生活影碟片 | 成人做爰66片免费看网站 | 国产福利影院 | 欧美三区四区 | 国产伦精品免费视频 | 她也啪在线视频 | 成人免费xxxxxx视频 | 三级在线观看网站 | 日本美女a级片 | www.youjizz.com在线观看 | 亚洲av无码精品色午夜 | 亚洲精品高清视频 | 亚洲AV成人无码一二三区在线 | 久久成人乱码欧美精品一区二区 | 精品成人在线视频 | 亚洲精品~无码抽插 | 久久91av| 成人在线免费高清视频 | 免费黄色网址在线 | 色91av| 99热视| 99久久久无码国产精品免费蜜柚 | 欧美性插视频 | 欧美精品一二三四 | 青草久久久| 一级免费av| 亚洲高清一区二区三区 | 午夜免费精品 | 国产色啪| 国产九九九九 | 国产精品极品 | 浪漫樱花动漫在线观看免费 | 奇米综合 | 三上悠亚痴汉电车 | 亚洲va在线∨a天堂va欧美va | xxxx在线播放| 澳门黄色录像 | 女人被狂躁60分钟视频 | 国产精品系列在线播放 | 婷婷深爱激情 | 免费的黄色的网站 | 久久色网站 | 青青青网 | 美女无遮挡网站 |