【C/C++】std::vector成员函数清单

文章目录

  • 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
相关推荐
波力海苔夹心脆67537 分钟前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩1 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
Hhy_11073 小时前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
starzy19903 小时前
深入理解Scala函数定义:从方法到函数的类型跨越
开发语言·scala
starzy19903 小时前
深入理解Scala递归函数:从栈溢出到尾调用优化
开发语言·scala
三*一4 小时前
Mapbox‑GL JS 多边形折点编辑工具:实现原理、功能拆解与踩坑总结
开发语言·javascript·ecmascript
青少儿编程课堂4 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
YSL0701244 小时前
C++基础
开发语言·c++
若亦_4 小时前
Java中关于this的三种用法
java·开发语言·intellij-idea
2601_968793144 小时前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化