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

C++ 标准模板库(STL)中的 vector 是一个动态数组,可以在运行时动态增加或减少大小。它提供了一组功能丰富的方法来管理元素集合,是 C++ 中最常用的容器之一。

特点:

  1. 动态大小vector 可以动态地增长或缩小,使得它适用于需要动态大小的情况。

  2. 连续存储vector 中的元素在内存中是连续存储的,这意味着可以通过指针进行高效的元素访问。

  3. 随机访问:可以通过索引在常量时间内访问 vector 中的任何元素。

  4. 自动管理内存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; 

  通过下面的例子来演示通过迭代器访问数组元素:

 #include <iostream>
 #include <vector>
 using namespace std;
 vector<int> vi;
 int main() 
 {
     for(int i=0;i<5;i++){
         vi.push_back(i+1);
     }
     vector<int>::iterator it=vi.begin();    //迭代器指向vi的首地址 
     for(int i=0;i<5;i++){
         cout<<*(it+i)<<" ";        //输出vi[i] 
     }
     return 0; 
 } 

输出结果:

1 2 3 4 5

  • vector常用函数

  (1)push_back()

  push_back(x)功能为在vector后面添加一个元素x,时间复杂度为O(1)。

 #include <iostream>
 #include <vector>
 using namespace std;
 vector<int> vi;
 int main() 
 {
     for(int i=0;i<5;i++){
         vi.push_back(i);    //将i的值依次插入到vi的尾部 
     }
     for(int i=0;i<vi.size();i++){
         cout<<vi[i]<<" ";
     } 
     return 0; 
 } 

输出结果:

0 1 2 3 4

  (2)pop_back()

  pop_back()用来删除vector的尾元素,时间复杂度为O(1)。

 #include <iostream>
 #include <vector>
 using namespace std;
 vector<int> vi;
 int main() 
 {
     for(int i=0;i<5;i++){
         vi.push_back(i);    //将i的值依次插入到vi的尾部 
     }
     vi.pop_back();    //删除尾元素 
     for(int i=0;i<vi.size();i++){
         cout<<vi[i]<<" ";
     } 
     return 0; 
 } 

输出结果:

0 1 2 3

  (3)size()

  size()用来获得vector中元素的个数,时间复杂度为O(1)。

 #include <iostream>
 #include <vector>
 using namespace std;
 vector<int> vi;
 int main() 
 {
     for(int i=0;i<5;i++){
         vi.push_back(i);    //将i的值依次插入到vi的尾部 
     }
     cout<<vi.size(); 
     return 0; 
 } 

输出结果:

5

  (4)clear()

  clear()用来清空vector中的所有元素,时间复杂度为O(n)。

 #include <iostream>
 #include <vector>
 using namespace std;
 vector<int> vi;
 int main() 
 {
     for(int i=0;i<5;i++){
         vi.push_back(i);    //将i的值依次插入到vi的尾部 
     }
     vi.clear();        //清空所有元素 
     cout<<vi.size(); 
     return 0; 
 }

输出结果:

0

  (5)insert()

  insert(it, x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度为O(n)。

 #include <iostream>
 #include <vector>
 using namespace std;
 vector<int> vi;
 int main() 
 {
     for(int i=0;i<5;i++){
         vi.push_back(i);    //将i的值依次插入到vi的尾部 
     }
     vi.insert(vi.begin()+2,10);        //将10插入到vi[2]的位置 
     for(int i=0;i<vi.size();i++){
         cout<<vi[i]<<" ";
     }
     return 0; 
 } 

输出结果:

0 1 10 2 3 4

  (6)erase()

  erase()既可以删除单个元素,还可以删除一个区间的所有元素。时间复杂度为O(n)。

  删除单个元素

 #include <iostream>
 #include <vector>
 using namespace std;
 vector<int> vi;
 int main() 
 {
     for(int i=0;i<5;i++){
         vi.push_back(i);    //将i的值依次插入到vi的尾部 
     }
     vi.erase(vi.begin()+2);        //删除vi[3] 
     for(int i=0;i<vi.size();i++){
         cout<<vi[i]<<" ";
     }
     return 0; 
 } 

输出结果:

0 1 3 4

  删除一个区间内的所有元素

 #include <iostream>
 #include <vector>
 using namespace std;
 vector<int> vi;
 int main() 
 {
     for(int i=0;i<5;i++){
         vi.push_back(i);    //将i的值依次插入到vi的尾部 
     }
     vi.erase(vi.begin()+2,vi.begin()+4);        //删除vi[2]、vi[3] 
     for(int i=0;i<vi.size();i++){
         cout<<vi[i]<<" ";
     }
     return 0; 
 } 

输出结果:

0 1 4

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值