vector的初始化有很多方式,在N維初始化時還會一些容易出現錯誤的地方。下面進行總結
以下的總結均以int作為模板參數
一維vector的初始化
vector的構造函數通常來說有五種,如下:
- vector():創建一個空vector
- vector(int nSize):創建一個vector,元素個數為nSize
- vector(int nSize,const t& t):創建一個vector,元素個數為nSize,且值均為t
- vector(const vector&):復制構造函數
- vector(begin,end):復制[begin,end)區間內另一個數組的元素到vector中
注意第三條,如果傳入的是兩個參數的話,第一個參數是大小,第二是個初值。
下面為測試代碼以及運行結果:
#include<iostream>
#include<vector>
using namespace std;
int main(){
////////////////
//構造函數部分
////////////////
//空vector
vector<int> vec1();
cout<<"vec1[0] = "<<vec1[0]<<endl;
//構造一行空vector
vector<int> vec2(1);
cout<<"vec2[0] = "<<vec2[0]<<endl;
//構造一行指定值得vector
vector<int> vec3(5,1);
cout<<"vec3[0-5] = ";
for(int i=0;i<5;i++){
cout<<' '<<vec3[i]<<' ';
}
cout<<endl;
//利用拷貝構造函數構造
vector<int> vec4(vec3);
cout<<"拷貝構造 vec4[0-5] = vec3[0-5] = ";
for(int i=0;i<5;i++){
cout<<' '<<vec4[i]<<' ';
}
cout<<endl;
//復制前閉后開的一段到vector中
int a[5]={1,2,3,4,5};
vector<int> vec5(a,a+5);
cout<<"vec5[0-5] = ";
for(int i=0;i<5;i++){
cout<<' '<<vec5[i]<<' ';
}
cout<<endl;
}
結果如下:
二維vector的初始化
先看怎么寫:
vector<vector <int> > ivec(m ,vector<int>(n));
簡單來說就是要利用上面的第三種方式,讓每個元素的初值是一個一維的vector。另外前面的模板參數里面也是一個嵌套的模式。
這里有一點要非常注意,有的編譯器在int后面的兩個> >之間一定要有一個空格,否則編譯器會報錯,因為它會認為>>是一個c++的運算符(有的不用這樣。