STL之vector容器

本文详细介绍了C++标准库中的std::vector,包括其内存管理、操作复杂度、常用成员函数以及示例代码。std::vector是一个动态数组,支持随机访问和高效在末尾插入删除元素。通过reserve()可以预先分配内存避免重分配,shrink_to_fit()可减少内存使用。此外,还展示了如何使用迭代器遍历和操作vector。
摘要由CSDN通过智能技术生成

vector 的存储是自动管理的,按需扩张收缩。 vector 通常占用多于静态数组的空间,因为要分配更多内存以管理将来的增长。 vector 所用的方式不在每次插入元素时,而只在额外内存耗尽时重分配。分配的内存总量可用 capacity() 函数查询。额外内存可通过对 shrink_to_fit() 的调用返回给系统。

重分配通常是性能上有开销的操作。若元素数量已知,则 reserve() 函数可用于消除重分配。

vector 上的常见操作复杂度(效率)如下:

  • 随机访问——常数 O(1)

  • 在末尾插入或移除元素——均摊常数 O(1)

  • 插入或移除元素——与到 vector 结尾的距离成线性 O(n)

std::vector (对于 bool 以外的 T )满足容器 (Container) 、具分配器容器 (AllocatorAwareContainer) 、顺序容器 (SequenceContainer) 、相接容器 (ContiguousContainer) (C++17 起)及可逆容器 (ReversibleContainer) 的要求。

元素访问
at:访问指定的元素,同时进行越界检查
operator[]:访问指定的元素
front:访问第一个元素
back:访问最后一个元素
data:返回指向内存中数组第一个元素的指针
迭代器
begin,cbegin:返回指向容器第一个元素的迭代器
end,cend:返回指向容器尾端的迭代器
rbegin,crbegin:返回指向容器最后元素的逆向迭代器
rend,crend:返回指向前端的逆向迭代器
容量
empty:检查容器是否为空
size:返回容纳的元素数
max_size:返回可容纳的最大元素数
reserve:预留存储空间
capacity:返回当前存储空间能够容纳的元素数
shrink_to_fit:通过释放未使用的内存减少内存的使用
修改器
clear:清除内容
insert:插入元素
emplace:原位构造元素
erase:擦除元素
push_back:将元素添加到容器末尾
emplace_back:在容器末尾就地构造元素
pop_back:移除末元素
resize:改变容器中可存储元素的个数
swap:交换内容
//
// Created by LiuHongzhe on 2021/11/11.
//
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    vector<ll>a;
    cout<<a.empty()<<endl;//检查容器是否为空
    cout<<a.size()<<endl;//返回容纳的元素数
    cout<<a.max_size()<<endl;//返回可容纳的最大元素数
    a.push_back(5);//将元素添加到容器末尾
    a.push_back(35);
    a.push_back(45);
    a.insert(a.begin(),25);//插入元素
    for(auto it=a.begin();it<a.end();it++)
    {
        cout<<*it<<" ";//返回指向容器第一个元素的迭代器,返回指向容器尾端的迭代器
    }
    cout<<endl;
    cout<<a.front()<<endl;//访问第一个元素
    cout<<a.back()<<endl;//访问最后一个元素
    a.pop_back();//移除末元素
    for(int i=0;i<a.size();i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    a.clear();//清除内容
    cout<<a.size()<<endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值