【C++】vector
1、定义
template<
class T,
class Allocator = std::allocator<T>
> class vector;
vector是连续存储的,而且存储是自动管理的,按需扩张。vector 通常占用多于静态数组的空间,因为要分配更多内存以管理将来的增长。
vector 所用的方式不在每次插入元素时,而只在额外内存耗尽时进行重分配。分配的内存总量可用 capacity() 函数查询。可以通过调用 shrink_to_fit()返回多余的内存给系统。
重分配通常是性能上有开销的操作。如果元素数量已知,那么 reserve() 函数可用于消除重分配。
vector 上的常见操作复杂度(效率)如下:
- 随机访问——常数 𝓞(1)。
- 在末尾插入或移除元素——均摊常数 𝓞(1)。
- 插入或移除元素——与到 vector 结尾的距离成线性 𝓞(n)。
2、特化
标准库提供 std::vector 对类型 bool 的特化,它可能为空间效率优化。
vector<bool> 节省空间的动态 bitset
3、成员函数
3.1 元素访问
3.1.1 at
reference at( size_type pos );
const_reference at( size_type pos ) const;
参数:
- pos - 要返回的元素位置
返回值:
- 所需元素的引用
异常:
若pos >= size()
,则抛出std::out_of_range
.
3.1.2 operator[]
返回指定位置的元素引用,不做边界检查。
注意:不能通过该操作符向容器插入新元素,通过此运算符访问不存在的元素是未定义行为。
3.1.3 front
3.1.4 back
3.1.5 data
3.2 容量
3.2.1 empty
bool empty() const;
检查容器是否无元素,即是否 begin() == end()。
返回值:
若容器为空则为 true,否则为 false。
3.2.2 size
size_type size() const;
返回容器中的元素数,即 std::distance(begin(), end())。
3.2.3 max_size
size_type max_size() const;
返回根据系统或库实现限制的容器可保有的元素最大数量,即对于最大容器的 std::distance(begin(), end())。
返回值:
元素数量的最大值。
此值通常反映容器大小上的理论极限,至多为 std::numeric_limits<difference_type>::max()。运行时,可用 RAM 总量可能会限制容器大小到小于 max_size() 的值。
3.2.4 reserve
void reserve( size_type new_cap );
增加 vector 的容量(即 vector 在不重新分配存储的情况下能最多能持有的元素的数量)到大于或等于 new_cap 的值。如果 new_cap 大于当前的 capacity(),那么就会分配新存储,否则该方法不做任何事。
reserve() 不会更改 vector 的大小。
如果 new_cap 大于 capacity(),那么所有迭代器,包括 end() 迭代器和所有到元素的引用都会失效。否则,没有迭代器或引用会失效。
在调用 reserve() 后,插入只会在它将导致 vector 的大小大于 capacity() 的值时触发重新分配。
3.2.5 capacity
3.2.6 shrink_to_fit
3.3 修改
3.3.1 push_back
void push_back( const T& value );
void push_back( T&& value );
向容器末尾插入元素。
3.3.2 clear
3.3.3 insert
3.3.4 emplace
emplace与insert最大的区别就是emplace可以避免临时变量的产生
3.3.5 erase
3.3.6 emplace_back
3.3.7 pop_back
3.3.8 resize
3.3.9 swap
3.4 构造函数
3.5 析构函数
3.6 operator=
3.7 assign
3.8 get_allocator
3.9 迭代器
3.9.1 begin
3.9.2 end
3.9.3 rbegin
3.9.4 rend
4、 非成员函数
4.1 逻辑运算符重载
<=>是三相运算符,可以理解为是其他运算符的组合
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南