- vector的定義
vector<typename> name;
相當于定義了一個一維陣列name[SIZE],只不過其長度可以根據需要進行變化,比較節省空間,通俗來講,vector就是“變長陣列”,
類似于一維陣列,typename可以是任何基本型別,也可以是STL容器,
vector<int> name; vector<double> name; vector<char> name; vector<Node> name; //Node為結構體型別 vector<vector<int> > name;
- vector容器內元素的訪問
vector可以通過下標和迭代器來訪問,
(1)通過下標訪問
這里,可以把vector看成普通陣列,訪問方式和普通陣列一樣(如vi[0]、vi[1]),
(2)通過迭代器訪問
迭代器可以理解為一種類似于指標的東西,定義為
vector<typename>::iterator it;
通過下面的例子來演示通過迭代器訪問陣列元素:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i+1); 9 } 10 vector<int>::iterator it=vi.begin(); //迭代器指向vi的首地址 11 for(int i=0;i<5;i++){ 12 cout<<*(it+i)<<" "; //輸出vi[i] 13 } 14 return 0; 15 }
輸出結果: 1 2 3 4 5
- vector常用函式
(1)push_back()
push_back(x)功能為在vector后面添加一個元素x,時間復雜度為O(1),
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //將i的值依次插入到vi的尾部 9 } 10 for(int i=0;i<vi.size();i++){ 11 cout<<vi[i]<<" "; 12 } 13 return 0; 14 }
輸出結果: 0 1 2 3 4
(2)pop_back()
pop_back()用來洗掉vector的尾元素,時間復雜度為O(1),
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //將i的值依次插入到vi的尾部 9 } 10 vi.pop_back(); //洗掉尾元素 11 for(int i=0;i<vi.size();i++){ 12 cout<<vi[i]<<" "; 13 } 14 return 0; 15 }
輸出結果: 0 1 2 3
(3)size()
size()用來獲得vector中元素的個數,時間復雜度為O(1),
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //將i的值依次插入到vi的尾部 9 } 10 cout<<vi.size(); 11 return 0; 12 }
輸出結果: 5
(4)clear()
clear()用來清空vector中的所有元素,時間復雜度為O(n),
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //將i的值依次插入到vi的尾部 9 } 10 vi.clear(); //清空所有元素 11 cout<<vi.size(); 12 return 0; 13 }
輸出結果: 0
(5)insert()
insert(it, x)用來向vector的任意迭代器it處插入一個元素x,時間復雜度為O(n),
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //將i的值依次插入到vi的尾部 9 } 10 vi.insert(vi.begin()+2,10); //將10插入到vi[2]的位置 11 for(int i=0;i<vi.size();i++){ 12 cout<<vi[i]<<" "; 13 } 14 return 0; 15 }
輸出結果: 0 1 10 2 3 4
(6)erase()
erase()既可以洗掉單個元素,還可以洗掉一個區間的所有元素,時間復雜度為O(n),
洗掉單個元素
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //將i的值依次插入到vi的尾部 9 } 10 vi.erase(vi.begin()+2); //洗掉vi[3] 11 for(int i=0;i<vi.size();i++){ 12 cout<<vi[i]<<" "; 13 } 14 return 0; 15 }
輸出結果: 0 1 3 4
洗掉一個區間內的所有元素
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //將i的值依次插入到vi的尾部 9 } 10 vi.erase(vi.begin()+2,vi.begin()+4); //洗掉vi[2]、vi[3] 11 for(int i=0;i<vi.size();i++){ 12 cout<<vi[i]<<" "; 13 } 14 return 0; 15 }
輸出結果: 0 1 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285755.html
標籤:其他
