当前位置: 首页 > news >正文

C++ 中std::vector<T>清除方式

在 C++ 中,std::vector<T> 可以通过多种方式清除(删除所有元素)。以下是几种常见的方法(为int类型为例):


1. 使用 clear()

std::vector<int> vec = {1, 2, 3, 4, 5};
vec.clear();
  • 效果:删除所有元素,size() 变为 0,但 capacity() 不变,底层内存仍然保留。
  • 适用场景:当你需要清空 vector 但希望保留已分配的内存,以便后续使用时减少重新分配的开销。

2. 重新赋值空 vector

vec = std::vector<int>();
  • 效果:删除所有元素,并释放底层内存(capacity() 可能缩小)。
  • 适用场景:当你希望清除所有元素并释放多余内存。

3. 使用 swap() 交换一个空 vector

std::vector<int>().swap(vec);
  • 效果vec 交换到一个新的空 vector,清空所有元素,并释放底层内存。
  • 适用场景:当你希望强制 vector 释放所有已分配的内存(通常 clear() 不会释放内存)。

4. 使用 erase() 移除所有元素

vec.erase(vec.begin(), vec.end());
  • 效果:删除所有元素,size() 变为 0,但 capacity() 可能不变。
  • 适用场景:一般不推荐,clear() 更简洁高效。

5. 使用 resize(0) 清空元素

vec.resize(0);
  • 效果:删除所有元素,size() 变为 0,但 capacity() 保持不变。
  • 适用场景:如果你需要保留已分配的容量,而不只是清空数据。

方法对比

方法是否清空 size()是否释放内存 (capacity())适用场景
clear()✅ 是❌ 否清除数据但保留内存
vec = std::vector<int>()✅ 是✅ 是清空并释放内存
swap(std::vector<int>())✅ 是✅ 是强制释放内存
erase(begin(), end())✅ 是❌ 否不推荐,clear() 更高效
resize(0)✅ 是❌ 否仅清空数据,保留内存

推荐

  • 如果只是想清空数据但保留内存,使用 clear()
  • 如果想清空数据并释放内存,使用 vec = std::vector<int>()std::vector<int>().swap(vec)

这样可以根据具体需求选择最合适的方式。

http://www.dtcms.com/a/99557.html

相关文章:

  • win32汇编环境,网络编程入门之十六
  • Reidis介绍
  • 收集的一些问题?
  • SolidJS 深度解析:高性能响应式前端框架
  • 基于SpringBoot的求职招聘网站系统(源码+数据库)
  • 【Spring Boot 与 Spring Cloud 深度 Mape 之十】体系整合、部署运维与进阶展望
  • 排序算法1--插入排序
  • 策略模式_行为型_GOF23
  • 深入理解前端防抖(Debounce)与节流(Throttle):原理、区别与实战示例
  • AWE 2025:当AI科技遇见智能家居
  • 请描述下你对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?
  • Java面向对象一篇通:从类与对象到Lambda(万字详解)
  • github免费编程类工具汇总与评估(二)
  • 2025年最新自动化/控制保研夏令营预推免面试真题分享(东南/浙大/华科清华)
  • mysql.8.4.4--初始化报错--libnuma.so.1缺失
  • Windows学习笔记(5)
  • Numpy进行数组函数操作
  • 鸿蒙项目源码-记账本app个人财物管理-原创!原创!原创!
  • 自动化发布工具CI/CD实践Jenkins介绍!
  • 动态规划--线性规划
  • Spring解决循环依赖
  • 【无人机路径规划】Matlab基于A星算法的无人机三维路径规划
  • maven高级
  • 微信小程序逆向开发
  • Java -jar运行jar包时可添加参数
  • ‌JVM 内存模型(JDK8+)
  • ModuleNotFoundError: No module named ‘demjson‘
  • JavaScript中的观察者模式
  • https://arxiv.org/
  • WebView展示广告对网站收益的影响分析(桌面平台非点击场景)