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

【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

相关文章:

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

文章目录 std::vector使用指南1 不同版本提供的能力基础&#xff1a;C98 / C03 提供的成员函数C11 新增的成员函数C14&#xff1a;基本无变化&#xff08;主要是标准库泛化&#xff0c;非 vector 成员变化&#xff09;C17 引入的新特性&#xff08;间接影响&#xff09;C20 新增…...

如何借助Hyper - V在Windows 10中构建安全软件测试环境

视频演示 手把手教你激活 Hyper-V 并安装 Windows 10 虚拟机 一、引言:软件探索的风险与解决方案 在数字化时代,软件更新换代的速度日新月异,对于热衷于探索新软件的朋友而言,主系统中安装新软件时的谨慎态度无可厚非。恶意软件的威胁犹如高悬的达摩克利斯之剑,稍不留…...

西门子 S7-1200 PLC 海外远程运维技术方案

西门子 S7-1200 PLC 海外远程运维技术方案 一、面向海外场景的核心优势 针对跨国企业、海外项目及远程技术支持需求&#xff0c;本方案基于巨控GRM552Y-CHE模块提供无缝的全球化远程PLC运维能力&#xff0c;突破地域及时差限制&#xff0c;显著提升国际项目响应效率。 二、海…...

如何对Video视频进行SEO优化?

如何对Video视频进行SEO优化&#xff1f; 在现代互联网的海洋中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;无疑是每一个网站管理员和内容创作者必须掌握的技能。而今天&#xff0c;我要向大家介绍一个极为强大的工具——Schema.org。它不仅能提升你的网站在搜索引擎…...

嵌入式学习--江协stm32day5

USART 1. 引脚与接口层 异步引脚&#xff1a; TX&#xff1a;发送数据输出&#xff1b;RX&#xff1a;接收数据输入&#xff1b;SW_RX&#xff1a;单线半双工模式的接收引脚&#xff08;替代 RX&#xff09;。 同步引脚&#xff1a;SCLK&#xff1a;同步模式下的时钟输出&…...

(LeetCode 动态规划(基础版))96. 不同的二叉搜索树 (递推 || 递归)

题目&#xff1a;96. 不同的二叉搜索树 思路&#xff1a;二叉树长度为n时&#xff0c;枚举每个点u作为根节点root&#xff0c;那么root左边的数构成左子树种数left&#xff0c;root右边的数构成右子树种数right&#xff0c;那么当前u为根节点下&#xff0c;二叉树的种数为left*…...

服务器中CC攻击的特点有哪些?

CC攻击作为一种常见的网络攻击类型&#xff0c;主要是用来攻击网站页面的&#xff0c;当大量的用户在访问网站的过程中&#xff0c;打开页面的速度会变得比较慢&#xff0c;给数据库造成的压力就越大&#xff0c;CC攻击会消耗大量的服务器资源&#xff0c;给企业带来一定的经济…...

vue项目使用svg图标

下面是在 Vue 3 项目中完整引入和使用 vite-plugin-svg-icons 的步骤 1、安装插件 npm install vite-plugin-svg-icons -D # 或 yarn add vite-plugin-svg-icons -D # 或 pnpm add vite-plugin-svg-icons -D 2、配置 Vite 在 vite.config.ts 或 vite.config.js 中配置&…...

智能网卡之hinic3 WQE(Work Queue Element)结构梳理

hinic3 WQE&#xff08;Work Queue Element&#xff09;结构详解 本文基于 hinic3 驱动源码&#xff0c;对 WQE&#xff08;Work Queue Element&#xff09;做详细讲解。如需查阅完整源码和结构体定义可参考hinic3_nic_qp.h等文件。 1. WQE 的作用 WQE&#xff08;Work Queue…...

go的工具库:github.com/expr-lang/expr

github.com/expr-lang/expr 是一个 Go 语言的表达式求值库&#xff0c;它允许你在运行时安全地执行表达式。主要用途包括&#xff1a; 1.表达式求值&#xff1a; program, err : expr.Compile("2 2") if err ! nil {// 处理错误 } result, err : expr.Run(program…...

力扣HOT100之二分查找:4. 寻找两个正序数组的中位数

这道题如果没有时间复杂度的限制的话&#xff0c;相当好做&#xff0c;但是这道题要求时间复杂度为O(log(m n))&#xff0c;思路很难想&#xff0c;我看了一圈题解&#xff0c;发现华南溜达虎的视频讲得还不错&#xff0c;我是参考他的思路写出来的&#xff0c;这里把他的思路…...

PyTorch——损失函数与反向传播(8)

Loss Functions 越小越好 L1loss MSELoss 损失函数 CrossEntyopyLoss 损失函数 import torch from torch.nn import L1Loss from torch import nn# 创建输入和目标张量&#xff0c;用于后续的损失计算 inputs torch.tensor([1,2,3],dtypetorch.float32) targets torch.tenso…...

macOS 升级 bash 到最新版本

macOS 的默认「终端」&#xff0c;千年不变的版本。 》〉bash --version GNU bash, version 3.2.57(1)-release (arm64-apple-darwin24) Copyright (C) 2007 Free Software Foundation, Inc. 官方 bash.git - bash 已经将 bash 升级到了 5.2的大版本。 macOS 最新版系统的 ba…...

Linux下如何查看一个端口被什么进程占用? 该进程又打开了哪些文件?

Linux下如何查看一个端口被什么进程占用&#xff1f; 该进程又打开了哪些文件&#xff1f; 查看端口 1.使用lsof命令查看端口占用的进程 lsof可以列出系统上打开的文件&#xff0c;其中包括网络连接、进程信息等。 lsof -i:<端口号> 例如&#xff0c;如果需…...

力扣面试150题--课程表

Day 63 题目描述 做法 初次思路&#xff1a;本质就是将所有前置课程和后置课程作为一个有向图&#xff08;前者指向后者&#xff09;&#xff0c;判断这个图是否是一个有向无环图&#xff08;即是否存在拓扑排序&#xff09;&#xff08;本质做法是dfs&#xff09; 做法&…...

用通俗的话解释下MCP是个啥?

在AI领域&#xff0c;模型的开发、部署和迭代速度日益加快&#xff0c;但随之而来的挑战也愈发显著&#xff1a;如何高效管理不同版本的模型&#xff1f;如何在复杂环境中确保模型的可追溯性和可复用性&#xff1f;如何实现跨团队、跨平台的模型协作&#xff1f; 在计算机领域…...

LeetCode 高频 SQL 50 题(基础版)之 【子查询】· 上

题目&#xff1a;1978. 上级经理已离职的公司员工 题解&#xff1a; select employee_id from Employees where salary<30000 and manager_id is not null and manager_id not in (select distinct employee_id from Employees ) order by employee_id题目&#xff1a;626.…...

Spark流水线+Gravitino+Marquez数据血缘采集

1.Openlinage和Marquez简介 1.1 OpenLineage 概述 OpenLineage 是一个开放标准和框架&#xff0c;用于跨工具、平台和系统捕获数据血缘信息。它定义了通用的数据血缘模型和API&#xff0c;允许不同的数据处理工具&#xff08;如ETL、调度器、数据仓库&#xff09;以标准化格…...

一个完整的时间序列异常检测系统,使用Flask作为后端框架,实现了AE(自编码器)、TimesNet和LSTM三种模型,并提供可视化展示

时间序列异常检测系统 下面是一个完整的时间序列异常检测系统,使用Flask作为后端框架,实现了AE(自编码器)、TimesNet和LSTM三种模型,并提供可视化展示。 系统概述 这个系统能够: 从多种来源加载时间序列数据使用三种先进算法进行异常检测可视化展示原始数据、重建数据和…...

深度学习在非线性场景中的核心应用领域及向量/张量数据处理案例,结合工业、金融等领域的实际落地场景分析

一、工业场景&#xff1a;非线性缺陷检测与预测 1. ‌半导体晶圆缺陷检测‌ ‌问题‌&#xff1a;微米级划痕、颗粒污染等缺陷形态复杂&#xff0c;与正常纹理呈非线性关系。‌解决方案‌&#xff1a; ‌输入张量‌&#xff1a;高分辨率晶圆图像 → 三维张量 (Batch, Height,…...

基于微信小程序的车位共享平台的设计与实现源码数据库文档

摘 要 近年来&#xff0c;随着国民经济的飞速发展&#xff0c;城镇化进程的步伐加快&#xff0c;城市人口急剧增长&#xff0c;人们的生活水平持续改善&#xff0c;特别是大中型城市&#xff0c;城市的交通规模日益增大&#xff0c;汽车的保有量不断提高&#xff0c;然而城市的…...

多模态大语言模型arxiv论文略读(111)

SEA: Supervised Embedding Alignment for Token-Level Visual-Textual Integration in MLLMs ➡️ 论文标题&#xff1a;SEA: Supervised Embedding Alignment for Token-Level Visual-Textual Integration in MLLMs ➡️ 论文作者&#xff1a;Yuanyang Yin, Yaqi Zhao, Yaji…...

网页端 VUE+C#/FastAPI获取客户端IP和hostname

1 IP可以获取&#xff0c;但是发现获取到的是服务端的IP&#xff0c;如何解决呢。 如果采用nginx反向代理&#xff0c;那么可以在conf/nginx.conf文件中配置 location /WebApi/ { proxy_pass http://localhost:5000/; #这个/会替换location种的WebApi路径 #关键&#xff0c;加…...

一个自动反汇编脚本

一、环境 wsl ubuntu18.04、python3.6 二、目的 调试程序&#xff0c;需要分析第三方库。希望能将多个库自动转为汇编文件。 三、使用方法 将该脚本下载&#xff0c;进入wsl&#xff0c;进入到该脚本所有文件夹。 请使用 python 脚本名.py 运行。 1&#xff09;、运行…...

函数与数列的交汇融合

前情概要 现行的新高考对数列的考查难度增加,那么整理与数列交汇融合的相关题目就显得非常必要了。 典例剖析 依托函数,利用导数,求数列的最值;№ 1 、 \color{blue}{№ 1、} №1、 等差数列 { a n } \{a_{n}\} {an​} 的前 n n n 项和为 S n S_{n} Sn​, 已知 S 10…...

怎么让自己ip显示外省?一文说清操作

在互联网时代&#xff0c;IP地址不仅关联网络连接&#xff0c;还可能影响IP属地显示。那么&#xff0c;手机和电脑用户怎么让自己IP显示外省&#xff1f;一文说清操作要点。 ‌ 二、4种主流方法详解 要让自己的IP显示为外省地址&#xff0c;主要有以下几种方法&#xff1a; …...

【Docker】容器安全之非root用户运行

【Docker】容器安全之非root用户运行 1. 场景2. 原 Dockerfile 内容3. 整改结果4. 非 root 用户带来的潜在问题4.1 文件夹读写权限异常4.2 验证文件夹权限 1. 场景 最近有个项目要交付&#xff0c;第三方测试对项目源码扫描后发现一个问题&#xff0c;服务的 Dockerfile 都未指…...

汽车车载软件平台化项目规模颗粒度选择的一些探讨

汽车进入 SDV 时代后&#xff0c;车载软件研发呈现出开源生态构建、电子架构升级、基础软件标准化、本土供应链崛起、AI 原生架构普及、云边协同开发等趋势&#xff0c;这些趋势促使车载软件研发面临新挑战&#xff0c;如何构建适应这些变化的平台化架构成为车企与 Tier 1 的战…...

【八股消消乐】构建微服务架构体系—服务注册与发现

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…...

大数据+智能零售:数字化变革下的“智慧新零售”密码

大数据+智能零售:数字化变革下的“智慧新零售”密码 大家好,今天咱们聊聊一个火到不行的话题:大数据在智能零售中的应用。这个领域,不仅是技术的“硬核战场”,更是商业创新的风口浪尖。谁能玩转数据,谁就能掌控消费者心智,实现销售爆发。 咱们不搞枯燥学术,而是用最“…...