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;
}