新闻中心

c++中vector如何添加和删除元素_C++ vector增删操作详解

2025-11-18
浏览次数:
返回列表
std::vector 提供 push_back、emplace_back 和 insert 添加元素,pop_back、erase 和 clear 删除元素,尾部操作效率最高,推荐使用 erase-remove 惯用法安全删除元素。

c++中vector如何添加和删除元素_c++ vector增删操作详解

在C++中,std::vector 是一个动态数组容器,能够自动管理内存并支持高效的随机访问。它提供了多种方法来添加和删除元素,使用时非常灵活。下面详细介绍 vector 的常见增删操作及其用法。

添加元素:push_back、emplace_back 和 insert

向 vector 中添加元素主要有以下几种方式:

  • push_back(value):在 vector 尾部插入一个已构造好的对象。这是最常用的方法之一。
  • emplace_back(args...):直接在 vector 尾部构造元素,避免临时对象的创建,效率更高,尤其适用于复杂对象。
  • insert(iterator, value):在指定位置插入一个或多个元素。可以在任意位置插入,但中间插入的性能开销较大(需要移动后续元素)。
示例代码:
#include <vector>
#include <iostream>

std::vector<int> vec;
vec.push_back(10);        // 添加元素 10
vec.emplace_back(20);     // 原地构造元素 20
vec.insert(vec.begin(), 5); // 在开头插入 5

// 输出结果:5 10 20
for (int n : vec) {
    std::cout << n << " ";
}

删除元素:pop_back、erase 和 clear

从 vector 中删除元素的方法包括:

  • pop_back():删除最后一个元素,不返回值(要获取值需先读取再删除)。
  • erase(iterator):删除指定位置的元素;也可删除一个区间 [first, last)。
  • clear():清空所有元素,使 vector 变为空。
示例代码:
vec.pop_back();                   // 删除末尾元素(20)
vec.erase(vec.begin());           // 删除第一个元素(5)
vec.erase(vec.begin() + 1, vec.end()); // 删除从索引1到末尾的所有元素
vec.clear();                      // 清空所有内容

注意事项与性能提示

使用 vector 进行增删操作时需要注意以下几点:

Whimsical Whimsical

Whimsical推出的AI思维导图工具

Whimsical 182 查看详情 Whimsical
  • 尾部操作(push_back / pop_back)效率最高,时间复杂度为 O(1)(均摊)。
  • 中间或头部插入/删除会触发元素移动,时间复杂度为 O(n),应尽量避免频繁操作。
  • 每次扩容时,vector 会重新分配内存并复制原有元素,可使用 reserve() 预留空间提升性能。
  • 调用 erase 或 pop_back 后,被删除元素的析构函数会被自动调用。
  • erase 返回下一个有效迭代器,循环删除时应正确接收返回值,避免使用失效迭代器。
  • 安全删除元素的正确写法

    当需要根据条件删除元素时,推荐结合 erase 与 remove_if 使用,避免手动迭代器失效问题:

    // 删除所有偶数
    vec.erase(std::remove_if(vec.begin(), vec.end(),
                [](int n){ return n % 2 == 0; }),
              vec.end());
    

    这种方式称为“erase-remove 惯用法”,是 C++ 中安全删除容器元素的标准做法。

    基本上就这些。掌握 push_back、emplace_back、insert、pop_back、erase 和 clear 的使用场景和注意事项,就能高效安全地操作 vector 容器。

以上就是c++++中vector如何添加和删除元素_C++ vector增删操作详解的详细内容,更多请关注其它相关文章!


# 返回值  # 福田站长网站推广有用吗  # 2017seo教程下载  # 青岛网站建设服务便宜  # 高邑企业网站推广报价  # 中高档餐厅营销推广  # 梁子湖网站做优化  # 鱼峰区网站建设推广  # 网络博客seo  # 东莞网站优化南通公司  # 南平网站优化去哪找工作  # 是一个  # c++  # 如何实现  # 清空  # 如何用  # 配置文件  # 多线程  # 迭代  # 怎么做  # 进阶  # stream  # ios 


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


相关推荐: 今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程  使用 Pandas 高效处理 .dat 文件:字符清理与数据计算  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  《GTA6》开发画面疑似泄露!这次可不是AI了  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  极兔快递快件信息查询系统 极兔快递官网运单号追踪  MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具  C++如何解决segmentation fault_C++段错误调试与原因分析  poki网页游戏推荐_poki免费游戏平台入口  Spyder启动失败:字体文件权限拒绝错误解决方案  优化大型XML文件解析:基于Python流式处理的内存高效方案  如何将HTML表格多行数据保存到Google Sheets  12306怎么选座位选到安静区_12306选座安静区域选择策略  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染  顺丰快递查询系统 官方正版查询入口  AO3镜像入口大全 AO3网页版内容访问全集  Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  服务端验证_j*ascript输入检查  fishbowl官网免费版 fishbowl养鱼网站入口  包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接  如何在CSS中使用浮动制作导航栏_float实现水平菜单  Composer如何在生产环境安全地执行composer update  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  怎么在mac上运行html代码_mac运行html代码方法【指南】  内存疯狂猛猛涨价:主板销量直接腰斩!  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  C#中解析不规范的HTML为XML 常见的坑与解决办法  大象笔记网页版入口 印象笔记网页版登录入口  谷歌google账号怎么注册账号 谷歌账号注册官方流程  学习通网页版官方登录 超星学习通电脑端入口指南  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  期待已久:小米17 Ultra、小米首款NAS本月登场  如何仅使用CSS更改登录界面背景图像图标的颜色  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  qq游戏大厅官方下载_qq游戏免费下载安装入口  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  优化Django表单:提交验证失败后保留用户输入  凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  实现分段式页面滚动导航:CSS与J*aScript教程  蛙漫官方正版入口 蛙漫网页在线全集免费观看  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践 

搜索