[STL] vector基本用法

vector的數據安排以及操作方式,與array非常相似。兩者的唯一區別在於空間的運用的靈活性。array是靜態空間,一旦配置了就不能改變。vector是動態空間,隨着元素的加入,它的內部機制會自行擴充空間以容納新元素。因此,vector的運用對於內存的合理利用與運用的靈活性有很大的幫助,我們再也不必因爲害怕空間不足而一開始要求一個大塊的array。

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 }
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章