C++标准模板库(STL)——vector常见用法详解

  • 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

 

posted @ 2021-05-26 23:49  熊猫耳朵  阅读(501)  评论(0编辑  收藏  举报