c++中vector用法总结

本文深入探讨C++中向量容器的特性与操作,包括动态大小调整、元素访问、插入与删除,以及排序和翻转等高级功能。通过实例说明vector如何高效地管理动态数组,适用于对C++数据结构有需求的学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

  1. vector(向量)是大小可变的序列容器
  2. 和数组相似,顺序存储,可使用下标访问(随机访问),但不同的是,vector大小可以动态改变,且是自动变化(容器自己处理的)
  3. vector非常有效地访问其元素(就像数组一样)并且相对有效地从其末尾添加或删除元素,例如cout<<iv[i];这是可以的。对于在末尾以外的位置插入或删除元素的操作,它们的性能比其他位置差。
  4. 虽然访问像数组一样,可以根据下标随机访问,但是它的插入不能根据下标像数组一样插入,例如cin>>iv[i];这是错误的

基本操作

详见官方http://www.cplusplus.com/reference/vector/vector/

  1. 必须引用的包

    #include <vector>
    
  2. 声明

    vector<int> iv;//也可选择存double型等,不一定是int型
    
  3. 末尾添加元素

    iv.push_back(x);
    
  4. 末尾删除元素

    iv.pop_back();
    
  5. 任意位置插入

    iv.insert (iv.begin()+i,2,100);//第一个表示在第i+1个位置前面插入;第二个表示插入两个同样的数值;第三个表示插入数值为100
    iv.insert (iv.begin(),100);//第一个表示在第一个位置处插入;第二个表示插入一个数值100
    
  6. 任意位置删除

    iv.erase (iv.begin()+i);//删除第i+1个元素
    iv.erase (iv.begin(),iv.begin()+3);//删除第一个到第三个元素(总共三个)
    
  7. 使用下标访问

    cout<<iv[0]<<endl;//下标从0开始
    
  8. 开始指针,末尾指针

    iv.begin();//指向第一个元素的位置(即下标0的位置)
    iv.end();//指向最后一个元素的下一个位置
    
  9. 迭代器访问

    vector<int>::iterator it;
    for(it=iv.begin();it!=iv.end();it++)
        cout<<*it<<endl;
     //或者
    for (int i = 0; i < iv.size(); i++) {
        cout << iv[i] << endl;
    }
     
    
  10. 向量大小 iv.size();

  11. 向量清除 iv.clear();

  12. 向量判空 iv.empty();

  13. 访问第一个元素 iv.front();

  14. 访问第二个元素 iv.back();

  15. 元素翻转

```
#include <algorithm>//元素翻转必须引用
reverse(iv.begin(), iv.end());
```
  1. 元素排序
```
#include <algorithm>//元素排序必须引用
sort(iv.begin(), iv.end());//默认是从小到大排序
```

```
//此处是从大到小排序
#include <algorithm>//元素排序必须引用
bool cmp(const int a,const int b)
{
    return a > b;
}
sort(iv.begin(),iv.end(),cmp);
```
  1. 调整容器大小 iv.resize(10)
resize会改变容器的容量和当前元素个数,并分配了内存,容器大小变成了10,不会改变之前容器里面已有的元素,后面会自动添加元素,默认值为0

换句人话:
	vector< int > iv;
    for ( int i=0; i<3;++i)
    {
       vecInt.push_back(i);
    }
    现在是里面有3个元素
    iv.resize(10);
    iv里面就有10个元素了,前三个是之前添加的0 1 2,后面7个是默认值0
    此时如果执行iv.push_back(5);
    然后遍历发现,打印出来的值是0 1 2 +7个0,没有5

这个真的卡了半天
如果后面想resize(10),然后往里面正常放数据
    vector<int> vIniMatches;
    vIniMatches.resize(iniMatchedNum);
    int num;       
    for(vector<int>::iterator i=vIniMatches.begin(), iEnd=vIniMatches.end(); i!=iEnd; i++){
        // 此处有操作 num不断变化的
         *i=num;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值