当前位置: 首页 > news >正文

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

文章目录

  • 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() 变成同时支持 constnon-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++20resize_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() constconst 版本C++98
reverse_iterator rbegin() / rend()反向迭代器C++98
const_reverse_iterator rbegin() const / rend() constconst 版本C++98
const_iterator cbegin() / cend()C++11
const_reverse_iterator crbegin() / crend()C++11

分配器支持

函数签名说明C++版本
allocator_type get_allocator() const noexcept返回使用的 allocatorC++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

相关文章:

  • 零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
  • 字符串字典序最大后缀问题详解
  • 迷宫问题(一)(C++版本)
  • 《高等数学》(同济大学·第7版)第二章第四节“隐函数及由参数方程所确定的函数的导数“
  • linux进程管理之从内存/cpu角度使用setrlimirt/rlimit
  • 【题解-洛谷】P1706 全排列问题
  • 露亦如电 · 时之沙 | 让遗憾在灰烬里随风而去
  • natapp 内网穿透失败
  • windows使用脚本杀死python进程
  • c++ —— 内存管理
  • SWE-Dev:开启自主特征驱动软件开发新纪元,重新定义大模型编码能力边界
  • DAY 44 预训练模型
  • 嵌入式知识篇---Zigbee串口
  • 高保真组件库:数字输入框
  • NT6打印机共享修复工具Fixprint系统补丁
  • Go深入学习延迟语句
  • Python 函数全攻略:函数基础
  • C++课设:简易科学计算器(支持+-*/、sin、cos、tan、log等科学函数)
  • 【MySQL】10.事务管理
  • 滴滴 服务端 面经
  • b站视频推广费用一般多少/网页开发用什么软件
  • 旅行网站开发需求说明书/网络营销与直播电商学什么
  • 无锡网站建设设计公司/深圳新闻最新事件
  • 南京建设银行官方网站/软件开发工资一般多少
  • 黄金网站app下载免费/免费的seo优化
  • 石家庄以岭药业股份有限公司招聘/免费网站排名优化在线