【C++】STL中Vector常见用法和示例

vector用法中文参考手册:https://zh.cppreference.com/w/cpp/container/vector

1. 头文件 < vector >

2. vector是什么

2.1 原理
  • std::vector是封装动态数组的顺序容器
  • 元素相继存储,不仅可以用迭代器,还可以用元素的常规指针访问元素
  • 不再每次插入元素时,只在额外内存耗尽时重分配,内存总量可用capacity()函数查询
2.2 复杂度
  • 随机访问:O(1)
  • 末尾插入或移除元素:O(1)
  • 插入或移除元素:O(n)

3. 常用函数

3.1 赋值函数
赋值函数作用
operator=赋值给容器
assign将值赋给容器
	vector<int> v;
	v = {1, 2, 3, 4, 5}; // 赋值
    /*
    assign()函数原型:
    1:void assign(const_iterator first, const_iterator last);
    将first到last之间的值赋值给调用者
    2:void assign(size_type n, const T& x = T());
    把n个x赋值给调用者
    */
    v2.assign(v.begin(), v.begin()+3);
    for(int n : v2){
        cout<<n<<' ';
    }
    cout<<endl; // 结果是 1 2 3

    v2.assign(5, 8);
    for(int n : v2){
        cout<<n<<' ';
    }
    cout<<endl; // 结果是 8 8 8 8 8
3.2 元素访问
元素访问作用
at访问指定元素,同时进行越界检查
operator[]访问指定元素
front访问第一个元素
back访问最后一个元素
data返回指向内存中数组第一个元素的指针
    cout<< v.at(0) <<endl; // 访问指定的元素,结果是 2
    //cout<< v.at(5) <<endl; // 进行越界检查,结果是 out_of_range
    cout<< v.front() <<endl; // 访问第一个元素,结果是 1
    cout<< v.back() <<endl; // 访问最后一个元素,结果是 5
    cout<< v.data() <<endl; // 访问指向内存中数组第一个元素的指针
3.3 迭代器
迭代器作用
begin返回指向容器第一个元素的迭代器
end返回指向容器尾端的迭代器
rbegin返回指向容器最后元素的逆向迭代器
rend返回指向前端的逆向迭代器
    vector<int> v3 = {1, 2, 3, 4, 5};
    vector<int>::iterator iter; // 正向迭代器
    vector<int>::reverse_iterator riter; // 逆向迭代器
    for(iter=v3.begin(); iter!=v3.end(); ++iter){
        cout<<*iter<<' ';
    } // 结果是 1 2 3 4 5
    cout<<endl;
    riter = v3.rbegin();
    for(riter=v3.rbegin(); riter!=v3.rend(); ++riter){
        cout<<*riter<<' ';
    } // 结果是 5 4 3 2 1
    cout<<endl;
3.4 容量
容量作用
empty检查容器是否为空
size返回容纳的元素数
max_size返回可容纳的最大元素数
reserve预留存储空间
capacity返回当前存储空间能够容纳的元素数
    vector<int> v4 = {2, 4, 6, 8, 10};
    cout<<v4.empty()<<endl; // 结果是 0,非空
    cout<<v4.size()<<endl; // 结果是 5
    cout<<v4.max_size()<<endl; // 结果是 1073741823,取决于计算机
    v4.reserve(8); // 预留8个存储空间
    cout<<v4.size()<<endl; // 结果是 5,大小不变
    cout<<v4.capacity()<<endl; // 结果是 8,预留空间改变
    for(iter=v4.begin(); iter!=v4.end(); ++iter){
        cout<<*iter<<' ';
    } // 结果是 2 4 6 8 10
3.5 修改器
修改器作用
clear清除内容
insert插入元素
erase擦除元素
push_back将元素添加到容器末尾
pop_back移除末尾元素
    /*
        insert()函数原型:
        void insert( iterator pos, size_type count, const T& value );
    */
    vector<int> v5 = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
    v5.insert(v5.begin()+2, 3, 5); // 在pos处插入count个value, count可以省略代表一个
    for(int n:v5) { cout<<n<<' '; } cout<<endl; // 结果是 1 2 5 5 5 2 3 3 3 4 4 4 4
    /*
        erase()函数原型:
        1.iterator erase( iterator pos );
        擦除pos上的元素
        2.iterator erase( iterator first, iterator last );
        擦除[first, last)范围的元素
    */
    v5.erase(v5.begin()+3); // 移除第4个位置上的元素
    for(int n:v5) { cout<<n<<' '; } cout<<endl; // 结果是 1 2 5 5 2 3 3 3 4 4 4 4
    v5.erase(v5.begin()+3, v5.begin()+5); // 移除[4, 6]位置上的元素
    for(int n:v5) { cout<<n<<' '; } cout<<endl; // 结果是 1 2 5 3 3 3 4 4 4 4
    v5.push_back(6); // 添加到容器末尾
    for(int n:v5) { cout<<n<<' '; } cout<<endl; // 结果是 1 2 5 3 3 3 4 4 4 4 6
    v5.pop_back(); // 移除末尾元素
    for(int n:v5) { cout<<n<<' '; } cout<<endl; // 结果是 1 2 5 3 3 3 4 4 4 4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值