news 2026/7/2 0:54:16

【std::vector】clear介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【std::vector】clear介绍

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

      • `std::vector::clear()` 详细说明
        • 1. 核心功能
        • 2. 对 size 和 capacity 的具体影响
        • 3. 代码示例
        • 4. 补充说明
      • 总结

你想了解C++标准库中std::vectorclear()成员函数的功能,并且重点关注这个函数是对size生效,还是对capacity生效。

std::vector::clear()详细说明

1. 核心功能

clear()的作用是销毁vector中所有的元素,并将vector元素数量(size)置为 0,但不会释放vector已经分配的内存空间(即不改变容量 capacity)。

2. 对 size 和 capacity 的具体影响
  • 对 size 的影响clear()会直接将vectorsize()返回值变为 0,因为容器内的所有元素都被销毁了,当前有效元素的数量为 0。
  • 对 capacity 的影响clear()完全不影响capacity()的返回值,容器之前分配的内存空间会被保留,不会被释放。
3. 代码示例

下面的代码可以直观展示clear()sizecapacity的影响:

#include<iostream>#include<vector>intmain(){// 创建一个vector并添加元素std::vector<int>vec={1,2,3,4,5};std::cout<<"调用clear()前:"<<std::endl;std::cout<<"size: "<<vec.size()<<std::endl;// 输出 5(当前元素数量)std::cout<<"capacity: "<<vec.capacity()<<std::endl;// 输出 5(分配的内存能容纳的元素数)// 调用clear()清空元素vec.clear();std::cout<<"\n调用clear()后:"<<std::endl;std::cout<<"size: "<<vec.size()<<std::endl;// 输出 0(元素已清空)std::cout<<"capacity: "<<vec.capacity()<<std::endl;// 输出 5(内存仍保留)// 补充:如果想同时清空元素并释放内存(改变capacity),可以用swap技巧std::vector<int>().swap(vec);// 用空vector交换,释放原有内存std::cout<<"\nswap后:"<<std::endl;std::cout<<"size: "<<vec.size()<<std::endl;// 输出 0std::cout<<"capacity: "<<vec.capacity()<<std::endl;// 输出 0(内存已释放)return0;}
4. 补充说明
  • clear()只是销毁元素,不会调用deallocate释放内存,这样做的目的是为了性能优化:如果后续需要向vector中添加新元素,不需要重新分配内存,直接复用原有空间即可。
  • 如果你既想清空元素,又想释放内存(让capacity也变为 0),可以使用示例中的swap技巧,或者在 C++11 及以上版本中使用shrink_to_fit()(注意:shrink_to_fit()是请求式的,编译器不一定会严格执行,但主流编译器都会支持)。

总结

  1. std::vector::clear()仅对size生效,会将size置为 0,销毁所有元素;
  2. clear()capacity无影响,不会释放已分配的内存空间;
  3. 若需清空元素并释放内存,可使用swapvectorshrink_to_fit()(C++11+)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 21:25:01

终极MapleStory游戏编辑器:Harepacker复活版完整使用指南

终极MapleStory游戏编辑器&#xff1a;Harepacker复活版完整使用指南 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 想要深度定制你的Maple…

作者头像 李华
网站建设 2026/7/1 23:18:56

Vue 3企业级后台系统快速上手:Element Plus Admin完整实践指南

Vue 3企业级后台系统快速上手&#xff1a;Element Plus Admin完整实践指南 【免费下载链接】element-plus-admin 基于vitetselementPlus 项目地址: https://gitcode.com/gh_mirrors/el/element-plus-admin Element Plus Admin是基于现代Vue.js 3技术栈构建的企业级后台管…

作者头像 李华
网站建设 2026/7/1 9:15:17

青龙面板自动化脚本5步配置法:告别手动重复操作

青龙面板自动化脚本5步配置法&#xff1a;告别手动重复操作 【免费下载链接】huajiScript 滑稽の青龙脚本库 项目地址: https://gitcode.com/gh_mirrors/hu/huajiScript 还在为每天重复的签到任务烦恼吗&#xff1f;还在手动执行各种平台任务吗&#xff1f;今天我要分享…

作者头像 李华
网站建设 2026/7/1 13:43:23

PDF-Extract-Kit与PaddleOCR整合:提升文字识别准确率

PDF-Extract-Kit与PaddleOCR整合&#xff1a;提升文字识别准确率 1. 引言&#xff1a;PDF智能提取的技术挑战与解决方案 在数字化办公和学术研究中&#xff0c;PDF文档的自动化处理已成为刚需。然而&#xff0c;传统OCR工具在面对复杂版式、数学公式、表格结构时往往力不从心…

作者头像 李华
网站建设 2026/7/1 5:56:30

面向工厂自动化的jscope接口开发:完整指南

让产线“看得见”&#xff1a;基于 jscope 的工厂自动化实时监控接口开发实战 你有没有遇到过这样的场景&#xff1f; 一台伺服电机在启停时总是轻微抖动&#xff0c;PLC日志里看不出异常&#xff0c;HMI上只显示“运行中”&#xff0c;万用表测电压也正常。但你知道——问题就…

作者头像 李华