【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 逻辑运算符重载

<=>是三相运算符,可以理解为是其他运算符的组合

4.2 std::erase

posted @   NotReferenced  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示