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

C++ STL vector 常用函数接口详解

C++ STL vector 容器提供了动态数组的核心功能,包括头文件引入、类模板定义及成员类型。内容涵盖构造与析构、赋值操作、元素访问(含边界检查)、迭代器使用、容量管理(如 reserve、shrink_to_fit)以及修改器(push_back、insert、erase 等)。通过具体代码示例展示各接口用法与注意事项,适用于 C++ 开发者快速查阅 vector 标准库 API。

热情发布于 2026/3/15更新于 2026/9/466 浏览

vector 向量(动态数组)


头文件

#include <vector>

定义

template <class T, class Allocator = std::allocator<T>>
class vector;

成员类型

成员类型定义
value_typeT
allocator_typeAllocator
size_type无符号整数类型(通常为 std::size_t)
referencevalue_type&
const_referenceconst value_type&

成员函数

构造、析构与赋值
构造函数
vector(); // 默认构造函数。构造一个空的 vector,使用默认的分配器。
// 示例:std::vector<int> vec; // 创建一个空的 vector
explicit vector(const Allocator& alloc); // 构造一个空的 vector,使用给定的分配器 alloc
// 示例:std::allocator<int> alloc; std::vector<int> vec(alloc);
explicit vector(size_type count, const Allocator& alloc = Allocator()); // 构造一个包含 count 个默认插入的 T 对象的 vector
// 示例:std::vector<int> vec(5); // vec = {0, 0, 0, 0, 0}
vector(size_type count, const T& value, const Allocator& alloc = Allocator()); // 构造一个包含 count 个值为 value 的元素的副本的 vector
// 示例:std::vector<int> vec(5, 666); // vec = {666, 666, 666, 666, 666}
template<class InputIt>
vector(InputIt first, InputIt last, const Allocator& alloc = Allocator()); // 构造一个包含范围 [first, last) 内容的 vector
// 示例:int arr[] = {1, 2, 3, 4, 5}; std::vector<int> vec(arr, arr + 3); // vec = {1, 2, 3}
// 示例:std::vector<int> other = {1, 2, 3, 4, 5}; std::vector<int> vec(other.begin(), other.begin() + 4); // vec = {1, 2, 3, 4}
vector(vector&& other); // 移动构造函数。从 other 移动构造内容
// 示例:std::vector<int> other = {1, 2, 3}; std::vector<int> vec = std::move(other); // vec = {1, 2, 3}, other = {}
vector(const vector& other); // 拷贝构造函数
// 示例:std::vector<int> other = {1, 2, 3}; std::vector<int> vec(other); // vec = {1, 2, 3}
vector(const vector& other, const Allocator& alloc); // 带分配器的拷贝构造函数,使用 alloc 作为分配器
// 示例:std::vector<int> other = {1, 2, 3}; std::allocator<int> alloc; std::vector<int> vec(other, alloc);
vector(vector&& other, const Allocator& alloc); // 带分配器的移动构造函数,使用 alloc 作为分配器
// 示例:std::vector<int> other = {1, 2, 3}; std::allocator<int> alloc; std::vector<int> vec(std::move(other), alloc);
vector(std::initializer_list<T> init, const Allocator& alloc = Allocator()); // 使用初始化列表构造 vector
// 示例:std::vector<int> vec = {1, 2, 3}; // vec = {1, 2, 3}
析构函数
~vector(); // 销毁 vector。元素的析构函数被调用,并释放所使用的存储空间。请注意,如果元素是指针,则指向的对象不会被销毁。
operator= : 将值赋给容器
vector& operator=(const vector& other); // 复制赋值运算符。用 other 内容的副本替换内容
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int> other = {4, 5, 6}; vec = other; // vec = {4, 5, 6}
vector& operator=(vector&& other); // 移动赋值运算符。使用移动语义替换内容。之后,other 处于有效但未指定的状态。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int> other = {4, 5, 6}; vec = std::move(other); // vec = {4, 5, 6}
vector& operator=(std::initializer_list<value_type> ilist); // 用初始化列表 ilist 标识的内容替换内容
// 示例:std::vector<int> vec = {1, 2, 3}; vec = {4, 5, 6}; // vec = {4, 5, 6}
assign : 将值赋给容器
void assign(size_type count, const T& value); // 将内容替换为 count 个 value 的副本
// 示例:std::vector<int> vec = {1, 2, 3}; vec.assign(5, 666); // vec = {666, 666, 666, 666, 666}
template<class InputIt>
void assign(InputIt first, InputIt last); // 用范围 [first, last) 中的元素副本替换内容
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int> other = {4, 5, 6}; vec.assign(other.begin(), other.end()); // vec = {4, 5, 6}
void assign(std::initializer_list<T> ilist); // 将内容替换为 ilist 中的元素
// 示例:std::vector<int> vec = {1, 2, 3}; vec.assign({4, 5, 6}); // vec = {4, 5, 6}
get_allocator : 返回关联的分配器
allocator_type get_allocator() const; // 返回与容器关联的分配器
// 示例:std::vector<int> vec; std::allocator<int> alloc = vec.get_allocator();
assign_range (C++23) : 将一个范围的值赋给容器
template<container-compatible-range<T> R>
constexpr void assign_range(R&& rg); // 用 rg 中每个元素的副本替换容器中的元素
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int> other = {4, 5, 6}; vec.assign_range(other); // vec = {4, 5, 6}

元素访问
operator[] : 访问指定的元素
reference operator[](size_type pos); // 返回对指定位置 pos 元素的引用。不执行边界检查。
// 示例:std::vector<int> vec = {1, 2, 3}; vec[1] = 666; // vec = {1, 666, 3}
const_reference operator[](size_type pos) const; // 返回对 const vector 指定位置 pos 元素的常引用。不执行边界检查。
// 示例:const std::vector<int> vec = {1, 2, 3}; int value = vec[0]; // value = 1
at : 访问指定的元素,带边界检查
reference at(size_type pos); // 返回指定位置 pos 元素的引用,并进行边界检查。如果 pos 不在容器的范围内,则抛出类型为 std::out_of_range 的异常。
// 示例:std::vector<int> vec = {1, 2, 3}; try { vec.at(10) = 999; } catch(const std::out_of_range& e) { /* handle error */ }
const_reference at(size_type pos) const; // 返回 const vector 指定位置 pos 元素的常引用,并进行边界检查。
// 示例:const std::vector<int> vec = {1, 2, 3}; int value = vec.at(0); // value = 1
front : 访问第一个元素
reference front(); // 返回 vector 中第一个元素的引用。等价于 *begin()。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.front() = 666; // vec = {666, 2, 3}
const_reference front() const; // 返回 const vector 中第一个元素的常引用。等价于 *cbegin()。
// 示例:const std::vector<int> vec = {1, 2, 3}; int value = vec.front(); // value = 1
back : 访问最后一个元素
reference back(); // 返回 vector 中最后一个元素的引用。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.back() = 666; // vec = {1, 2, 666}
const_reference back() const; // 返回 const vector 中最后一个元素的常引用。
// 示例:const std::vector<int> vec = {1, 2, 3}; int value = vec.back(); // value = 3
data : 直接访问底层连续存储
T* data(); // 返回指向 vector 中作为元素存储的底层数组的指针。
// 示例:std::vector<int> vec = {1, 2, 3}; int* ptr = vec.data(); // ptr 指向 vec 内部数组的首元素
const T* data() const; // 返回指向 const vector 中作为元素存储的底层数组的常量指针。
// 示例:const std::vector<int> vec = {1, 2, 3}; const int* ptr = vec.data();

迭代器
begin, cbegin (C++11) : 返回指向起始的迭代器
iterator begin(); // 返回指向 vector 第一个元素的迭代器。如果 vector 为空,则返回的迭代器将等于 end()。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int>::iterator it = vec.begin();
const_iterator begin() const; // 返回指向 vector 第一个元素的常量迭代器。
// 示例:const std::vector<int> vec = {1, 2, 3}; std::vector<int>::const_iterator it = vec.begin();
const_iterator cbegin() const noexcept; // 返回指向 vector 第一个元素的常量迭代器。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int>::const_iterator it = vec.cbegin();
end, cend (C++11) : 返回指向末尾的迭代器
iterator end() noexcept; // 返回一个迭代器,指向 vector 中最后一个元素的后一个位置。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int>::iterator it = vec.end();
const_iterator end() const noexcept; // 返回一个常量迭代器,指向 vector 中最后一个元素的后一个位置。
// 示例:const std::vector<int> vec = {1, 2, 3}; std::vector<int>::const_iterator it = vec.end();
const_iterator cend() const noexcept; // 返回一个常量迭代器,指向 vector 中最后一个元素的后一个位置。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int>::const_iterator it = vec.cend();
rbegin, crbegin (C++11) : 返回指向起始的逆向迭代器
reverse_iterator rbegin(); // 返回一个逆向迭代器,指向反向 vector 的第一个元素。它对应于非反向 vector 的最后一个元素。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int>::reverse_iterator it = vec.rbegin();
const_reverse_iterator rbegin() const; // 返回一个逆向常量迭代器,指向反向 vector 的第一个元素。
// 示例:const std::vector<int> vec = {1, 2, 3}; std::vector<int>::const_reverse_iterator it = vec.rbegin();
const_reverse_iterator crbegin() const noexcept; // 返回一个逆向常量迭代器,指向反向 vector 的第一个元素。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int>::const_reverse_iterator it = vec.crbegin();
rend, crend (C++11) : 返回指向末尾的逆向迭代器
reverse_iterator rend(); // 返回一个逆向迭代器,指向反转 vector 的最后一个元素之后的元素。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int>::reverse_iterator it = vec.rend();
const_reverse_iterator rend() const; // 返回一个逆向常量迭代器,指向反转 vector 的最后一个元素之后的元素。
// 示例:const std::vector<int> vec = {1, 2, 3}; std::vector<int>::const_reverse_iterator it = vec.rend();
const_reverse_iterator crend() const noexcept; // 返回一个逆向常量迭代器,指向反转 vector 的最后一个元素之后的元素。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int>::const_reverse_iterator it = vec.crend();

容量
size : 返回元素数量
size_type size() const; // 返回容器中的元素数量,即 std::distance(begin(), end())。
// 示例:std::vector<int> vec = {1, 2, 3}; std::cout << vec.size(); // 输出 : 3
empty : 检查容器是否为空
bool empty() const; // 检查容器是否没有元素,即 begin() == end() 是否为真。
// 示例:std::vector<int> vec; std::cout << vec.empty(); // 输出 : 1
capacity : 返回当前已分配存储空间中可容纳的元素数量
size_type capacity() const; // 返回容器当前已分配空间所能容纳的元素数量。
// 示例:std::vector<int> vec = {1, 2, 3}; std::cout << vec.capacity(); // 输出 : 3(或更大)
reserve : 预留存储空间
void reserve(size_type new_cap); // 将 vector 的容量增加到大于或等于 new_cap 的值。reserve() 不会改变 vector 的大小。
// 示例:std::vector<int> vec; vec.reserve(5); std::cout << vec.capacity(); // 输出 : 5
shrink_to_fit : 通过释放未使用的内存来减少内存使用
void shrink_to_fit(); // 请求移除未使用的容量。这是一个非强制性的请求,要求将 capacity() 减小到 size()。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.reserve(10); vec.shrink_to_fit();
max_size : 返回元素的最大可能数量
size_type max_size() const; // 返回容器能够容纳的最大元素数量,受系统或库实现限制。
// 示例:std::vector<int> vec; std::cout << vec.max_size();

修改器
push_back : 添加元素到结尾
void push_back(const T& value); // 将给定元素 value 添加到容器末尾。新元素初始化为 value 的副本。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.push_back(666); // vec = {1, 2, 3, 666}
void push_back(T&& value); // 将给定元素 value 添加到容器末尾。将 value 移动到新元素中。
// 示例:std::vector<std::string> vec = {"Hello"}; std::vector<std::string> other = {"World"}; vec.push_back(std::move(other[0]));
pop_back : 移除末元素
void pop_back(); // 移除容器的最后一个元素。在空容器上调用 pop_back 会导致未定义行为。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.pop_back(); // vec = {1, 2}
resize : 更改存储的元素数量
void resize(size_type count); // 将容器的大小调整为包含 count 个元素。如果当前大小小于 count,则追加额外的默认插入元素。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.resize(5); // vec = {1, 2, 3, 0, 0}
void resize(size_type count, const value_type& value); // 将容器的大小调整为包含 count 个元素。追加 value 的额外副本。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.resize(5, 666); // vec = {1, 2, 3, 666, 666}
insert : 插入元素
iterator insert(const_iterator pos, const T& value); // 在容器的指定位置插入元素。在 pos 前插入 value 的副本。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.insert(vec.begin() + 1, 666); // vec = {1, 666, 2, 3}
iterator insert(const_iterator pos, T&& value); // 在容器的指定位置插入元素。在 pos 前插入 value,可能使用移动语义。
// 示例:std::vector<std::string> vec = {"Hello"}; std::vector<std::string> other = {"World"}; vec.insert(vec.end(), std::move(other[0]));
iterator insert(const_iterator pos, size_type count, const T& value); // 在容器的指定位置插入元素。在 pos 前插入 count 个 value 的副本。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.insert(vec.begin() + 1, 3, 666); // vec = {1, 666, 666, 666, 2, 3}
template<class InputIt>
iterator insert(const_iterator pos, InputIt first, InputIt last); // 在容器的指定位置插入元素。在 pos 前插入来自范围 [first, last) 的元素。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int> other = {4, 5, 6}; vec.insert(vec.begin() + 1, other.begin(), other.end());
iterator insert(const_iterator pos, std::initializer_list<T> ilist); // 在容器的指定位置插入元素。在 pos 前插入来自初始化列表 ilist 的元素。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.insert(vec.begin() + 1, {4, 5, 6});
erase : 擦除元素
iterator erase(iterator pos); // 从容器中擦除指定元素。移除 pos 处的元素。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.erase(vec.begin() + 1); // vec = {1, 3}
iterator erase(const_iterator pos); // 从容器中擦除指定元素。移除 pos 处的元素。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.erase(vec.cbegin()); // vec = {2, 3}
iterator erase(iterator first, iterator last); // 从容器中擦除指定元素。移除范围 [first, last) 中的元素。
// 示例:std::vector<int> vec = {1, 2, 3, 4, 5}; vec.erase(vec.begin() + 1, vec.begin() + 4); // vec = {1, 5}
iterator erase(const_iterator first, const_iterator last); // 从容器中擦除指定元素。移除范围 [first, last) 中的元素。
// 示例:std::vector<int> vec = {1, 2, 3, 4, 5}; vec.erase(vec.cbegin() + 2, vec.cend()); // vec = {1, 2}
clear : 清除内容
void clear(); // 从容器中擦除所有元素。在此调用之后,size() 返回零。使任何指向所含元素的引用、指针和迭代器失效。
// 示例:std::vector<int> vec = {1, 2, 3}; vec.clear(); // vec = {}
swap : 交换内容
void swap(vector& other); // 与 other 交换容器的内容和容量。不调用单个元素的任何移动、复制或交换操作。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int> other = {4, 5, 6}; vec.swap(other); // vec = {4, 5, 6}, other = {1, 2, 3}
emplace (C++11) : 就地构造元素
template<class... Args>
iterator emplace(const_iterator pos, Args&&... args); // 在 pos 之前直接构造一个新元素。
// 示例:struct Point { Point(int x, int y) : x(x), y(y) {} int x, y; }; std::vector<Point> vec; vec.emplace(vec.begin(), 1, 2);
emplace_back (C++11) : 就地构造元素于结尾
template<class... Args>
void emplace_back(Args&&... args); // 在容器末尾直接构造一个新元素。
// 示例:struct Point { Point(int x, int y) : x(x), y(y) {} int x, y; }; std::vector<Point> vec; vec.emplace_back(1, 2);
insert_range (C++23) : 插入元素范围
template<container-compatible-range<T> R>
constexpr iterator insert_range(const_iterator pos, R&& rg); // 在 pos 之前,以非逆序插入 rg 中元素的副本。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int> other = {4, 5, 6}; vec.insert_range(vec.begin() + 1, other);
append_range (C++23) : 添加一个元素范围到结尾
template<container-compatible-range<T> R>
constexpr void append_range(R&& rg); // 在 end() 之前,以非逆序插入来自范围 rg 的元素副本。
// 示例:std::vector<int> vec = {1, 2, 3}; std::vector<int> other = {4, 5, 6}; vec.append_range(other);

目录

  1. vector 向量(动态数组)
  2. 头文件
  3. 定义
  4. 成员类型
  5. 成员函数
  6. 构造、析构与赋值
  7. 构造函数
  8. 析构函数
  9. operator= : 将值赋给容器
  10. assign : 将值赋给容器
  11. get_allocator : 返回关联的分配器
  12. assign_range (C++23) : 将一个范围的值赋给容器
  13. 元素访问
  14. operator[] : 访问指定的元素
  15. at : 访问指定的元素,带边界检查
  16. front : 访问第一个元素
  17. back : 访问最后一个元素
  18. data : 直接访问底层连续存储
  19. 迭代器
  20. begin, cbegin (C++11) : 返回指向起始的迭代器
  21. end, cend (C++11) : 返回指向末尾的迭代器
  22. rbegin, crbegin (C++11) : 返回指向起始的逆向迭代器
  23. rend, crend (C++11) : 返回指向末尾的逆向迭代器
  24. 容量
  25. size : 返回元素数量
  26. empty : 检查容器是否为空
  27. capacity : 返回当前已分配存储空间中可容纳的元素数量
  28. reserve : 预留存储空间
  29. shrinktofit : 通过释放未使用的内存来减少内存使用
  30. max_size : 返回元素的最大可能数量
  31. 修改器
  32. push_back : 添加元素到结尾
  33. pop_back : 移除末元素
  34. resize : 更改存储的元素数量
  35. insert : 插入元素
  36. erase : 擦除元素
  37. clear : 清除内容
  38. swap : 交换内容
  39. emplace (C++11) : 就地构造元素
  40. emplace_back (C++11) : 就地构造元素于结尾
  41. insert_range (C++23) : 插入元素范围
  42. append_range (C++23) : 添加一个元素范围到结尾

更多推荐文章

查看全部
  • 2026 年主流 AI Agent 产品完整梳理与选型指南
  • Mac 平台 Homebrew 安装配置及常用命令详解
  • GitHub 十大 Claude Skills 精选,实战提升开发效率
  • C++ 图论实战:深入理解三种最短路径算法
  • 国内热门 AI 绘画工具盘点(上)
  • Python vs C++ 极简性能对比
  • OpenClaw 配置指南:打造个性化 AI 助手
  • WorkBuddy 一键部署教程:AI 办公智能体配置指南
  • 哈希表概念、冲突解决与 C++ 实现
  • FPGA 烧写硬件连接详解:Vivado 固化程序操作指南
  • 英伟达与 GitHub 免费大模型 API Key 获取指南
  • ROS 2 机器人运行指南:海龟仿真器与 ros2 run 命令解析
  • 基于官方 API 搭建 QQ 群聊机器人教程
  • Windows 资源管理器增强:QTTabBar 中文优化版实战指南
  • C++ 模板编程基础:泛型编程入门与实践
  • C++ 开发工具 vcpkg 安装使用与避坑指南
  • C++ 类与对象进阶:初始化列表、静态成员与编译器优化实战
  • C++ 内存管理进阶:从裸指针到智能指针
  • GitNexus:AI 智能体代码库索引知识图谱
  • GitHub Copilot 接入第三方 OpenAI 兼容模型及自定义提示词指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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