新闻中心

c++ vector怎么用 c++ vector容器用法全解

2025-12-05
浏览次数:
返回列表
vector是C++ STL中常用的动态数组容器,支持自动内存管理、随机访问和动态扩容。通过#include 引入,可进行多种初始化如空构造、指定大小、列表初始化等。常用操作包括push_back、emplace_back添加元素,pop_back删除末尾元素,erase删除指定位置或区间元素,front和back访问首尾元素,size、empty、capacity获取容量信息,resize调整大小,reserve预分配空间。遍历方式有下标、迭代器和范围for循环,推荐使用const auto&避免拷贝。vector内部采用连续内存存储,支持O(1)随机访问,但中间插入删除为O(n),需注意性能影响。频繁扩容可通过reserve优化,避免深拷贝建议传引用参数。掌握vector的使用能显著提升编程效率与程序稳定性。

c++ vector怎么用 c++ vector容器用法全解

vector 是 C++ STL 中最常用的一种动态数组容器,它能自动管理内存,支持随机访问,并且可以动态扩容。相比普通数组,vector 更安全、更灵活,是日常编程中处理序列数据的首选工具。

1. vector 的基本定义与初始化

要使用 vector,需要包含头文件 #include

vector v1; // 创建空的 int 类型 vector
vector v2(5); // 创建 5 个元素,初始值为 0.0
vector v3(3, 10); // 创建 3 个元素,每个都是 10
vector v4 = {1, 2, 3, 4}; // C++11 支持列表初始化
vector v5(v4); // 拷贝构造,v5 是 v4 的副本

也可以从数组或另一个容器构造:

int arr[] = {1, 2, 3};
vector v6(arr, arr + 3);

2. 常用操作函数说明

vector 提供了丰富的成员函数来操作数据。

添加元素:
  • v.push_back(x);:在末尾插入一个元素
  • v.emplace_back(x);:比 push_back 更高效,直接在末尾构造对象
删除元素:
  • v.pop_back();:删除最后一个元素(不返回值)
  • v.clear();:清空所有元素
  • v.erase(it);:删除指定迭代器位置的元素
  • v.erase(it1, it2);:删除一个区间 [it1, it2)
访问元素:
  • v[i]v.at(i):访问第 i 个元素(at 会做越界检查)
  • v.front();:返回第一个元素
  • v.back();:返回最后一个元素
容量与大小相关:
  • v.size();:当前元素个数
  • v.empty();:判断是否为空
  • v.capacity();:当前分配的存储空间大小
  • v.resize(n);v.resize(n, val);:调整大小
  • v.reserve(n);:预分配空间,避免频繁扩容
其他实用操作:
  • v.swap(v2);:交换两个 vector 的内容
  • swap(v, v2);:标准 swap 函数,效率高

3. 遍历 vector 的方法

有多种方式可以遍历 vector 中的元素。

下标遍历: for (int i = 0; i   cout } 迭代器遍历: for (auto it = v.begin(); it != v.end(); ++it) {
  cout }
范围 for 循环(推荐): for (const auto& x : v) {
  cout }

如果只是读取,建议使用 const auto& 避免拷贝;需要修改则用 auto&。

4. vector 的性能与注意事项

vector 内部使用连续内存存储,因此支持 O(1) 随机访问,但在中间插入/删除是 O(n) 操作,效率较低。

  • 频繁在末尾添加元素时,使用 reserve() 可减少内存重新分配次数
  • 避免在 vector 中间频繁 insert/erase,考虑 list 或 deque 是否更合适
  • vector 的扩容策略通常是成倍增长(如 2 倍),具体由编译器实现决定
  • 当 vector 被复制或作为参数传递时,会进行深拷贝,代价较高,建议传引用

例如:

void print(const vector& v) {
  for (int x : v) cout }

这样不会拷贝整个 vector,提高效率。

基本上就这些。vector 使用简单但功能强大,掌握好它的用法,能大幅提升编码效率和程序稳定性。

以上就是c++++ vector怎么用 c++ vector容器用法全解的详细内容,更多请关注其它相关文章!


# 但在  # 网站建设起点  # 大汉影视网站建设管理  # 建设资料规范网站  # 宁波seo优化基础  # 常德网站建设项目方案  # 网站建设德州  # 德州专业seo平台排名  # 搜索引擎优化网站收录  # 南宁创新seo技巧公司  # 网站建设公司慕枫  # 推荐使用  # 容器用法  # 第一个  # 编解码  # 都是  # 如何将  # 转换为  # 迭代  # 清空  # 遍历  # c++  # 工具  # 编码 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 写好的html代码怎么运行出来_运行写好的html代码方法【教程】  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  《主播少女的秘密账号迷宫》首支宣传片  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道  Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题  2026年CSGO开箱网站推荐 CSGO开箱平台精选  Angular Material 垂直步进器:实现底部到顶部排序的教程  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  composer的"require-dev"部分是用来做什么的?  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  深入理解J*a编译器的兼容性选项:从-source到--release  Golang并发任务中错误如何聚合_Golang goroutine error收集方式  c++项目目录结构应该如何组织_c++工程化项目结构规范  b站怎么删除评论_b站评论管理与删除操作  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  J*aScript异步迭代器_j*ascript异步遍历  拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法  Steam官网入口直达 Steam注册及登录步骤  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  PHP中高效并行检查多链接状态的教程  C++如何解决segmentation fault_C++段错误调试与原因分析  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  Mac怎么使用表情符号_Mac Emoji快捷键面板  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  利用5118提升短视频内容效果_5118短视频关键词优化方法  R星幕后开发视频泄露 包含《GTA6》等多款大作  纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  J*aScript实现动态背景色下的文本与按钮颜色自适应调整  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  Typer应用中动态命令行参数的解析与处理  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  在python-socketio事件处理器中安全访问Flask应用上下文  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  AO3官网镜像链接 Archive of Our Own同人文在线浏览  汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明 

搜索