标签:vector int clear C++ Vector 内存 Example points
为什么要对 Vector 进行内存强制回收?
1,Vector 的 clear() 函数仅仅是将 vector 的 size 设置为0,所存储的对象占用的内存并没有被回收。
2,Vector 本身是一个内存只会增长不会减小的容器。
3,最根本目的是减低内存占用、优化内存使用率避免浪费。
什么样的 Vector 应当进行手动内存回收?
1,存储大量数据、对内存占用较高的vec。
2,生命周期一直活跃于整个程序生命周期且会被反复clear、再写入的vec。
用什么方法回收?
clear 后直接空 swap 一次。
如果存储的是裸指针,必须先遍历释放裸指针!
#include <iostream> #include <vector> using std::vector; // 随便创建一个结构体 typedef struct Point { int x; int y; int val; // 顺带演示统一初始化 (现代C++) Point(int x, int y, int value) : x(x), y(y), val(value) {}; }; int main() { // 定义一个 vector vector<Point> points; // 随便填充一下 for (size_t i = 0; i < 9000; i++) { points.push_back(Point(i, i, -99999)); } // clear清理vector points.clear(); // 输出一下 vector 长度和容量 std::cout << "Vector Size: " << points.size() << std::endl; // size: 0 std::cout << "Vector Capacity: " << points.capacity() << std::endl; // capacity: 12138 std::cout << "===========================" << std::endl; // 从这里将 vector 的容量强制置空 vector<Point>().swap(points); // 再次输出一下 std::cout << "Vector Size: " << points.size() << std::endl; // siez: 0 std::cout << "Vector Capacity: " << points.capacity() << std::endl; // capacity: 0 return EXIT_SUCCESS; }
TRANSLATE with x English TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back
标签:vector,int,clear,C++,Vector,内存,Example,points 来源: https://www.cnblogs.com/airchip/p/15677977.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。