文章目录
- std::vector使用指南
-
- [1 不同版本提供的能力](#1 不同版本提供的能力)
-
- [基础:C++98 / C++03 提供的成员函数](#基础:C++98 / C++03 提供的成员函数)
- [C++11 新增的成员函数](#C++11 新增的成员函数)
- [C++14:基本无变化(主要是标准库泛化,非 vector 成员变化)](#C++14:基本无变化(主要是标准库泛化,非 vector 成员变化))
- [C++17 引入的新特性(间接影响)](#C++17 引入的新特性(间接影响))
- [C++20 新增的成员函数](#C++20 新增的成员函数)
- C++23(支持现代特性)
- [总结:不同版本对 `vector` 的增强](#总结:不同版本对
vector
的增强)
- [2 清单](#2 清单)
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 |