跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ std::vector 接口详解:从构造到操作

综述由AI生成C++ std::vector 容器的核心接口与用法。内容涵盖构造函数、赋值运算符、迭代器类型及容量管理方法。详细说明了元素访问(operator[], front, back)、修改操作(push_back, pop_back, insert, erase)以及比较运算符的实现原理。此外,还探讨了迭代器分类(Input, Forward, Random Access 等)的区别,并对比了 C++ 嵌套 vector 实现二维数组与 C 语言动态开辟二维数组的原理差异。

二进制发布于 2026/3/24更新于 2026/5/2112K 浏览
C++ std::vector 接口详解:从构造到操作

vector 接口概览

vector 是一个类模板,可以存储各种类型。其底层基于数组实现,属于顺序容器。

1. 构造函数

// 用 n 个 val 构造 vector 对象
explicit vector(size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());
// 用一段迭代器区间构造 vector 对象
template<class InputIterator>
vector(InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
// 拷贝构造 vector
vector(const vector& x);

2. 赋值运算符重载

// 用一个 vector 对象赋值给另一个 vector 对象
vector& operator=(const vector& x);

3. 迭代器

// 分为普通迭代器,const 版本迭代器,反向迭代器
// begin 指向空间的起始位置
iterator begin();
const_iterator begin() const;
// end 指向尾后位置
iterator end();
const_iterator end() const;
// 反向迭代器,rbegin 指向末尾
reverse_iterator rbegin();
const_reverse_iterator rbegin ;

;
;
()
const
// rend 指向空间起始位置的前一个位置
reverse_iterator rend()
const_reverse_iterator rend() const

4. 容量

// 返回 vector 中元素的个数
size_type size() const;
// n < size(),保留前 n 个元素,其余删除;n > size(), 插入元素到 n 个数据
void resize(size_type n, value_type val = value_type());
// vector 的容量
size_type capacity() const;
// 判空
bool empty() const noexcept;
// n > capacity(), 申请空间到 n 个或者更大;其它情况,不会申请空间,vector 的容量没有影响
void reserve(size_type n);
// 缩容,请求容器的容量适应 size 的大小(不一定等于 size,可能会大于)
void shrink_to_fit();

5. 访问元素

// 访问 n 位置上的元素,并返回其引用
reference operator[](size_type n);
const_reference operator[](size_type n) const;
// 访问第一个元素
reference front();
const_reference front() const;
// 访问最后一个元素
reference back();
const_reference back() const;

6. 修改

// 赋值,用一个 vector 的内容去代替当前的内容,修改它的 size
template<class InputIterator>
void assign(InputIterator first, InputIterator last);
// 用 n 个 val 去赋值
void assign(size_type n, const value_type& val);
// 用初始化列表去赋值
void assign(initializer_list<value_type> il);

初始化列表是 C++ 库里的一个类模板。其构造函数包含 initializer_list() noexcept,还有 3 个成员函数:

// 返回初始化列表中的元素个数
size_t size() const noexcept;
// 返回初始化列表中第一个元素的指针
const T* begin() const noexcept;
// 返回初始化列表最后一个元素后一个位置的指针
const T* end() const noexcept;
// 尾插
void push_back(const value_type& val);
// 尾删
void pop_back();
// 在 pos 位置之前插入元素
iterator insert(const_iterator position, const value_type& val);
// 在 pos 位置插入 n 个元素
iterator insert(const_iterator position, size_type n, const value_type& val);
// 在 pos 位置插入一段迭代器区间
template<class InputIterator>
iterator insert(const_iterator position, InputIterator first, InputIterator last);
// 在 pos 位置插入一个初始化列表
iterator insert(const_iterator position, initializer_list<value_type> il);
// 删除单个元素或者一段迭代器区间的元素
iterator erase(const_iterator position);
iterator erase(const_iterator first, const_iterator last);
// 交换两个 vector 对象的内容
void swap(vector& x);
// 删除所有的元素
void clear() noexcept;

7. 友元函数

// 比较两个 vector 对象的大小,逐元素进行比较
template<class T, class Alloc>
bool operator==(const vector<T, Alloc>& lhs, const vector<T, Alloc>& rhs);
template<class T, class Alloc>
bool operator!=(const vector<T, Alloc>& lhs, const vector<T, Alloc>& rhs);
template<class T, class Alloc>
bool operator<(const vector<T, Alloc>& lhs, const vector<T, Alloc>& rhs);
template<class T, class Alloc>
bool operator<=(const vector<T, Alloc>& lhs, const vector<T, Alloc>& rhs);
template<class T, class Alloc>
bool operator>(const vector<T, Alloc>& lhs, const vector<T, Alloc>& rhs);
template<class T, class Alloc>
bool operator>=(const vector<T, Alloc>& lhs, const vector<T, Alloc>& rhs);

8. 二维数组与迭代器类型

迭代器是有类型的。在 insert 函数中使用了模板,参数是 InputIterator。迭代器种类包括 Input、Output、Forward、Bidirectional、Random Access。

  • Input、Output 代表输入输出。
  • Forward 代表单向迭代器,支持 ++ 操作。
  • Bidirectional 代表双向迭代器,支持 ++、-- 操作。
  • Random Access 代表随机迭代器,支持 ++、--、+、- 操作。

能够传递单向迭代器的函数也能够传递双向迭代器,当然也能够传随机迭代器,因为单向迭代器支持的 ++ 操作,其它迭代器也支持。同理,传双向迭代器的函数也能够传随机迭代器。不同的函数对迭代器类型有不同要求,因此需要不同的迭代器类型。

在 C 语言中有一维数组、二维数组,在 C++ 中如何使用?vector 的底层是一个数组,可以用 vector<vector<T>> 表示二维数组,其中 T 是模板参数。 假设 vector 的成员变量如下:

template<class T>
class vector {
private:
    T* _start; // 空间的起始地址
    size_t _size; // 存储元素的个数
    size_t _capacity; // 空间的容量
};

假设存储的是整型数据,vector<vector<int>> 的结构类似于二维数组。用下标 [] 访问的时候其实就是调用了两次 operator[] 运算符重载函数。第一次调用返回的是一个 vector<int> 对象的引用,第二次是由这个返回值调用运算符重载函数的,返回二维数组里的数据。 C 语言访问二维数组的方式其实就是一次解引用,因为二维数组其实在逻辑上就是一维数组,地址空间是连续的,所以只需要用空间的起始地址 + 偏移量再解引用即可。

使用动态开辟的二维数组,访问数据时是通过两次解引用的方式访问数据的,第一次解引用访问的是一个指针,该指针指向一段数组空间,第二次也是通过 (起始地址 + 偏移量) 的方式解引用访问到数据的。

目录

  1. vector 接口概览
  2. 1. 构造函数
  3. 2. 赋值运算符重载
  4. 3. 迭代器
  5. 4. 容量
  6. 5. 访问元素
  7. 6. 修改
  8. 7. 友元函数
  9. 8. 二维数组与迭代器类型
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 前端安全基础:密码存储与常见漏洞防护
  • ERNIE-4.5-0.3B 轻量化部署与效能实践
  • 飞算 JavaAI 专业版在 Java 微服务重构中的效率提升实践
  • ERNIE-4.5-0.3B 超轻量模型部署与能力评测指南
  • Spring Cloud 与 Dubbo 架构选型与实战对比
适合 Java 算法刷题的优质网站推荐
  • AI 开发不只是调接口:从面试看工程化与技术深度
  • Nginx 配置 HTTPS 实战:前端与后端集成指南
  • 快速排序非递归实现详解:基于栈的模拟思路
  • Redis Hash 类型核心指令与实战详解
  • 背包类动态规划详解:0-1、完全及二维费用
  • Android 常用三方库混淆规则整理
  • 国外清淤机器人应用案例与实践经验
  • 手写 C++ TCP 服务器:自定义协议与粘包处理实战
  • 黑客的四个级别与自学路线中的常见误区
  • C++ STL list 容器详解:使用与模拟实现
  • 2026 年前端发展趋势:AI 原生、跨端统一与全栈深化
  • 线性动态规划入门:四道经典例题实战解析
  • Python 发展现状与未来趋势
  • 易语言高级进阶:混合编程、系统底层与开源生态
  • 相关免费在线工具

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online