vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块的array。
vector动态增加大小,并不是在原空间之后持续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。
vector动态增加大小,并不是在原空间之后持续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 #include <algorithm> 5 using namespace std; 6 7 int main() 8 { 9 string str[] = {"Alex", "John", "Robert"}; 10 //创建一个空vector容器 11 vector<int> v1; 12 //创建一个有10个空元素的vector容器 13 vector<int> v2(10); 14 //创建一个有10个元素的vector容器,并为每个元素赋值为0 15 vector<int> v3(10,0); 16 //根据字符串数组创建vector容器 17 vector<string> v4(str,str + 3); 18 19 //迭代器法遍历 20 vector<string>::iterator sIt = v4.begin(); 21 while(sIt != v4.end()){ 22 cout<< *sIt ++ << " "; 23 } 24 cout<<endl; 25 26 //拷贝构造 27 vector<string> v5(v4); 28 //下标法遍历 29 for(int i = 0;i < 3;i ++){ 30 cout<< v5[i] << " "; 31 } 32 cout<<endl; 33 34 return 0; 35 }
vector创建二维数组:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int main() 5 { 6 vector < vector <int> > array(3); 7 for(int i=0; i <3; i++) 8 array[i].resize(3);//设置数组的大小3X3 9 //现在可以和使用数组一样使用这个vector 10 for(int i=0; i <3; i++) 11 for(int j=0; j <3; j++) 12 array[i][j]=(i*j); 13 //输出 14 for(int i=0; i <3; i++) 15 { 16 for(int j=0; j <3; j++) 17 cout << array[i][j] << " "; 18 cout << endl; 19 } 20 cout<<"After resizing:"<<endl; 21 // 添加两行,对列也要重新设置大小 22 array.resize(5); 23 array[3].resize(3); 24 array[4].resize(3); 25 //现在是5X3的数组了 26 for(int i=0; i <5; i++) 27 for(int j=0; j <3; j++) 28 array[i][j]=(i*j); 29 for(int i=0; i <5; i++) 30 { 31 for(int j=0; j <3; j++) 32 cout << array[i][j] << " "; 33 cout << endl; 34 } 35 return 0; 36 }
二维数组去除重复行:
1 res.erase(unique(res.begin(), res.end()), res.end());
二维数组迭代输出:
1 vector<vector<int>>::iterator IE; 2 3 vector<int>::iterator it; 4 for(IE=array.begin();IE<array.end();IE++) 5 { 6 for (it=(*IE).begin();it<(*IE).end();it++) 7 { 8 cout<<*it<<" "; 9 } 10 cout<<endl; 11 }