可以免費進入的網站正能量域名網址關鍵詞查詢網站
目錄
1.模板類vector
2.模板類array(C++11)
3.比較數(shù)組、vector對象和array對象
模板類vector和array是數(shù)組的替代品。
1.模板類vector
模板類vector類似于string類,也是一種動態(tài)數(shù)組。您可以在運行階段設置vector對象的長度,可在末尾附加新數(shù)據,還可以中間插入新數(shù)據?;旧?#xff0c;它是使用new創(chuàng)建動態(tài)數(shù)組的替代品。實際上,vector類確實使用new和delete來管理內存,但這種工作是自動完成的。
這里介紹一些基本的實用知識:首先,要使用vector對象,必須包含頭文件vector。其次,vector包含在名稱空間std中,因此您可以使用using編譯指令、using聲明或std::vector。第三,模板使用不同的語法來指出它存儲的數(shù)據類型。第四,vector類使用不同的語法來指定元素數(shù)。
下面舉例:
#include<vector>
...
using namespace std;
vector<int> vi;//create a zero-size array of int
int n;
cin >> n;
vector<double> vd(n);//create an array of n double
其中,vi是一個vector<int>對象,vd是一個vector<double>對象。由于vector對象在您插入或添加值時自動調整長度,因此可以將vi的初始長度設置為0.但要調整長度,需要使用vector包中的各種方法。
一般,下面的聲明創(chuàng)建一個名為vt的vector對象,它可存儲n_elem個類型為typeName的元素:
vector<typeName> vt(n_elem);
其中,n_elem可以是整型常量,也可以是整型變量。
vector類的功能比數(shù)組強大,但付出的代價是效率稍低。如果需要的是長度固定的數(shù)組,使用數(shù)組是更佳的選擇,但代價是不那么方便和安全。
2.模板類array(C++11)
array對象的長度是固定的,也使用棧(靜態(tài)內存分配),而不是自由存儲區(qū),因此其效率與數(shù)組相同,但更方便,更安全。
要創(chuàng)建array對象,需要包含頭文件array。
#include<array>
...
using namespace std;
array<int,5> ai;//create array object of 5 ints
array<double,4> ad = {1.2,2.1,3.43,4.3};
下面的聲明創(chuàng)建一個名為arr的array對象,它包含n_elem個類型為typeName的元素:
array<typeName,n_elem> arr;
與創(chuàng)建vector對象不同的是,n_elem不能是變量。
3.比較數(shù)組、vector對象和array對象
//4.24
#if 1
#include<iostream>
#include<vector> //STL C++98
#include<array> //C++11
using namespace std;int main()
{//C,original C++double a1[4] = { 1.2, 2.4, 3.6, 4.8 };//STL C++98vector<double> a2(4);//no simple way to initialize in C98a2[0] = 1.0 / 3.0;a2[1] = 1.0 / 5.0;a2[2] = 1.0 / 7.0;a2[3] = 1.0 / 9.0;//C++11 - create and initialize array objectarray<double, 4> a3 = { 3.14, 2.72, 1.62, 1.41 };array<double, 4> a4;a4 = a3;//valid for array objects of same size//use array notationcout << "a1[2]: " << a1[2] << " at " << &a1[2] << endl;cout << "a2[2]: " << a2[2] << " at " << &a2[2] << endl;cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl;cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl;//misdeeda1[-2] = 20.2;//含義為:找到a1指向的地方,向前移兩個double元素,并將20.2存儲到目的地。也就是說,將信息存儲到數(shù)組的外面。cout << "a1[-2]: " << a1[-2] << " at " << &a1[-2] << endl;cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl;cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl;system("pause");return 0;
}
#endif
可以發(fā)現(xiàn):從地址看,array對象和數(shù)組存儲在相同的內存區(qū)域(棧)中,而vector對象存儲在另一個區(qū)域(自由存儲區(qū)或堆)中;可以將一個array對象賦給另一個array對象,而數(shù)組必須逐個元素復制數(shù)據。