C++ vector常用方法_C++ vector容器高频使用函数汇总
发布时间 - 2026-01-09 00:00:00 点击率:次size() 返回当前元素个数,capacity() 返回已分配内存可容纳的元素总数;resize(n) 改变 size() 并可能初始化新元素,reserve(n) 仅预分配 capacity() 不改变 size()。
vector 的 size() 和 capacity() 到底有什么区别?
很多人调用 size() 看到 10 就以为内存占了 10 个元素的空间,其实不一定。size() 返回当前实际存了多少个元素,capacity() 才是底层分配的连续内存能容纳多少个——它往往 ≥ size(),因为 vector 会预留空间避免频繁 realloc。
- 插入大量数据前,用
reserve(n)预分配容量,可避免多次拷贝重分配(尤其对非 trivial 类型) -
resize(n)会改变size():若n > size(),末尾补默认构造对象;若n ,直接截断(已析构) -
shrink_to_fit()是非强制请求,编译器可能忽略;想真正释放多余内存,得靠 swap 技巧:std::vector
(v).swap(v);
用 at() 还是 [] 访问元素?什么时候会抛异常?
operator[] 不做边界检查,越界是未定义行为(常见 crash 或静默脏读);at(index) 会检查,越界时抛 std::out_of_range 异常。
- 调试阶段建议优先用
at(),上线后若确定索引安全、且性能敏感,再换[] - 迭代器失效场景下(如
push_back()触发扩容),所有已有迭代器、指针、data()返回的地址都失效,但at()和[]只依赖 index,不受影响 - 注意:空 vector 调用
front()或back()同样是未定义行为,必须先判空
erase() 删除元素为什么容易出错?怎么安全批量删?
erase(iterator) 返回下一个有效迭代器,不是 void;如果写成 v.erase(it++); 就跳过下一个元素——因为 it++ 先返回旧值再自增,而 erase 已让旧 i
t 失效。
- 单删推荐写法:
it = v.erase(it); // 安全,it 指向原 it+1
- 删满足条件的多个元素,用 remove-erase 惯用法:
v.erase(std::remove_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; }), v.end()); - 不要在循环中用
for (int i = 0; i 边删边改 size,会导致漏删或越界;改用反向遍历或 while + erase 返回值
vector 是特化,别把它当普通容器用
std::vector 是 C++ 标准强制要求的位压缩特化,它不存储 bool 对象,而是把 8 个 bool 打包进 1 字节。这导致几个关键差异:
-
operator[]返回的是代理对象std::vector,不是::reference bool&,所以不能取地址:bool* p = &v[0]; // 编译失败
- 迭代器不是原生指针,
std::vector是自定义类,某些算法(如需要指针算术的)可能不兼容::iterator - 若需布尔数组且要支持取址、稳定迭代器,改用
std::deque或std::vector(用 0/1 代替 false/true)
vector 的“常用”背后藏着不少隐式契约:capacity 变化时机、迭代器失效规则、特化陷阱……这些不显眼的地方,才是线上 bug 最爱藏身的位置。
# 字节
# c++
# 区别
# 为什么
# for
# while
# bool
# char
# int
# void
# 循环
# 指针
# operator
# 对象
# 算法
# bug
# 特化
# 迭代
# 才是
# 多少个
# 的是
# 几个
# 多个
# 什么时候
# 已有
# 很多人
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何使用Blade模板引擎?(完整语法和示例)
使用C语言编写圣诞表白程序
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
如何用AWS免费套餐快速搭建高效网站?
如何在IIS中新建站点并配置端口与IP地址?
QQ浏览器网页版登录入口 个人中心在线进入
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel如何使用模型观察者?(Observer代码示例)
Laravel中的Facade(门面)到底是什么原理
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
javascript日期怎么处理_如何格式化输出
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何在万网开始建站?分步指南解析
独立制作一个网站多少钱,建立网站需要花多少钱?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
北京网站制作公司哪家好一点,北京租房网站有哪些?
5种Android数据存储方式汇总
Laravel如何创建自定义Artisan命令?(代码示例)
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
如何在阿里云域名上完成建站全流程?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
动图在线制作网站有哪些,滑动动图图集怎么做?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
个人网站制作流程图片大全,个人网站如何注销?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
如何快速搭建高效简练网站?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
西安专业网站制作公司有哪些,陕西省建行官方网站?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程

