新闻中心
c++中vector如何添加和删除元素_C++ vector增删操作详解
std::vector 提供 push_back、emplace_back 和 insert 添加元素,pop_back、erase 和 clear 删除元素,尾部操作效率最高,推荐使用 erase-remove 惯用法安全删除元素。

在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推出的AI思维导图工具
182
查看详情
- 尾部操作(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用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践


2025-11-18
浏览次数:次
返回列表