文章目录
std::vector使用指南 1 不同版本提供的能力 基础:C++98 / C++03 提供的成员函数 C++11 新增的成员函数 C++14:基本无变化(主要是标准库泛化,非 vector 成员变化) C++17 引入的新特性(间接影响) C++20 新增的成员函数 C++23(支持现代特性) 总结:不同版本对 `vector` 的增强
2 清单 构造与析构函数 容量相关函数 元素访问 修改操作 迭代器接口 分配器支持 特别说明:`std::vector<bool>` 特化 附加:非成员相关函数(在 `<algorithm>` 和 `<utility>` 中)
std::vector使用指南
1 不同版本提供的能力
基础:C++98 / C++03 提供的成员函数
这些是最初的 std::vector
提供的核心接口:
函数分类 成员函数 构造 & 析构 vector()
/ vector(size_t)
/ vector(size_t, const T&)
/ vector(begin, end)
容量操作 size()
/ capacity()
/ max_size()
/ resize()
/ empty()
/ reserve()
元素访问 operator[]
/ at()
/ front()
/ back()
数据访问 data()
(非 const 仅 C++03)修改元素 push_back()
/ pop_back()
/ insert()
/ erase()
/ clear()
/ assign()
/ swap()
迭代器 begin()
/ end()
/ rbegin()
/ rend()
C++11 新增的成员函数
C++11 引入了移动语义、智能构造、initializer_list 等现代特性。
类别 新增成员函数 构造函数 vector(std::initializer_list<T>)
修改操作 emplace_back()
/ emplace()
迭代器 cbegin()
/ cend()
/ crbegin()
/ crend()
数据访问 data()
变成同时支持 const
和 non-const
移动语义 移动构造函数和移动赋值运算符 内存管理 使用 allocator_traits 更灵活地控制内存行为(底层)
C++14:基本无变化(主要是标准库泛化,非 vector 成员变化)
std::vector
本身成员函数无明显增加更侧重算法泛化(如 std::make_reverse_iterator
)
C++17 引入的新特性(间接影响)
虽然 vector
成员函数未变,但你可以使用:
data()
安全性增强(支持空容器时返回有效指针)std::size(v)
, std::empty(v)
(非成员函数支持)
C++20 新增的成员函数
类别 成员函数 修改操作 resize_and_overwrite(size, lambda)
✅内存操作 shrink_to_fit()
行为稳定常量支持 consteval
/ constexpr
支持几乎所有成员函数迭代器 contains()
未加入 vector,是 set/map 的(常见误解)
resize_and_overwrite
是性能优化函数,用于原地构造内容。
C++23(支持现代特性)
类别 成员函数 范围操作 contains()
(set
, map
特有)iterator 扩展 begin()
/ end()
全部支持 constexpr
std::vector<bool>
提升 bit-reference 安全性(编译器支持有差异) operator[]
更明确地支持 constexpr
(提高编译期能力)
总结:不同版本对 vector
的增强
C++版本 变化重点 C++98/03 初始接口、复制语义 C++11 移动语义、emplace、initializer_list C++14 基本无变化 C++17 增强泛型接口、算法 C++20 resize_and_overwrite
、全面 constexpr
化C++23 更现代、安全的范围与编译期支持
2 清单
std::vector<T>
成员函数完整清单(含函数签名、功能说明、适用的 C++ 标准版本)
构造与析构函数
函数签名 说明 C++版本 vector()
默认构造,空向量 C++98 explicit vector(size_type n)
构造 n 个默认值元素 C++98 vector(size_type n, const T& value)
构造 n 个指定值 C++98 template <class InputIt> vector(InputIt first, InputIt last)
构造区间元素 C++98 vector(const vector& other)
拷贝构造 C++98 vector(vector&& other)
移动构造 C++11 vector(std::initializer_list<T> ilist)
初始化列表构造 C++11 ~vector()
析构函数 C++98 vector& operator=(const vector& other)
拷贝赋值 C++98 vector& operator=(vector&& other)
移动赋值 C++11 vector& operator=(std::initializer_list<T> ilist)
初始化列表赋值 C++11
容量相关函数
函数签名 说明 C++版本 size_type size() const noexcept
当前元素个数 C++98 size_type capacity() const noexcept
当前分配容量 C++98 size_type max_size() const noexcept
最大可存储元素数 C++98 bool empty() const noexcept
是否为空 C++98 void resize(size_type n)
改变元素个数(默认值) C++98 void resize(size_type n, const T& value)
改变元素个数(指定值) C++98 void reserve(size_type new_cap)
扩充容量 C++98 void shrink_to_fit()
释放冗余容量 C++11(行为标准化于 C++20)
元素访问
函数签名 说明 C++版本 T& operator[](size_type pos)
非边界检查访问 C++98 const T& operator[](size_type pos) const
同上 C++98 T& at(size_type pos)
带边界检查访问 C++98 const T& at(size_type pos) const
同上 C++98 T& front()
返回首元素 C++98 const T& front() const
同上 C++98 T& back()
返回尾元素 C++98 const T& back() const
同上 C++98 T* data() noexcept
原始指针访问 C++11 const T* data() const noexcept
同上 C++11(C++03为非标准扩展)
修改操作
函数签名 说明 C++版本 void assign(size_type n, const T& val)
用 n 个元素赋值 C++98 template <class InputIt> void assign(InputIt first, InputIt last)
区间赋值 C++98 void assign(std::initializer_list<T> ilist)
初始化列表赋值 C++11 void push_back(const T& value)
末尾添加元素 C++98 void push_back(T&& value)
移动添加 C++11 template <class... Args> void emplace_back(Args&&... args)
原地构造末尾元素 C++11 void pop_back()
删除末尾元素 C++98 iterator insert(iterator pos, const T& value)
插入元素 C++98 iterator insert(iterator pos, T&& value)
移动插入 C++11 iterator insert(iterator pos, size_type count, const T& value)
插入 count 个值 C++98 template <class InputIt> iterator insert(iterator pos, InputIt first, InputIt last)
插入区间 C++98 iterator insert(iterator pos, std::initializer_list<T> ilist)
插入初始化列表 C++11 template <class... Args> iterator emplace(iterator pos, Args&&... args)
原地插入 C++11 iterator erase(iterator pos)
删除一个元素 C++98 iterator erase(iterator first, iterator last)
删除区间 C++98 void clear() noexcept
清空 C++98 void swap(vector& other)
交换内容 C++98 template <class Operation> void resize_and_overwrite(size_type n, Operation op)
自定义重构内容 C++20
迭代器接口
函数签名 说明 C++版本 iterator begin()
/ end()
正向迭代器 C++98 const_iterator begin() const
/ end() const
const 版本 C++98 reverse_iterator rbegin()
/ rend()
反向迭代器 C++98 const_reverse_iterator rbegin() const
/ rend() const
const 版本 C++98 const_iterator cbegin()
/ cend()
C++11 const_reverse_iterator crbegin()
/ crend()
C++11
分配器支持
函数签名 说明 C++版本 allocator_type get_allocator() const noexcept
返回使用的 allocator C++98
特别说明:std::vector<bool>
特化
std::vector<bool>
是位优化特化版本,部分接口行为不同(如返回 proxy 而非 bool&
),C++20 和 C++23 对其进行了更安全的增强。
附加:非成员相关函数(在 <algorithm>
和 <utility>
中)
函数签名 说明 C++版本 std::swap(vector&, vector&)
交换内容 C++98 std::begin(v)
/ std::end(v)
泛型访问迭代器 C++11 std::size(v)
/ std::empty(v)
泛型访问 C++17