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 }