STL-vector清空的几种方法加代码梳理
2018-12-09 23:38
302 查看
STL-vector清空的几种方法加代码梳理
在做行人检测的项目(HOG+SVM方法)时,因为要计算每幅图像的hog描述子向量,通过调用hog的compute方法,需要传入一个描述子向量:
HOGDescriptor hog; vector<float> descriptors; hog.compute(src/*inputImage*/, descriptors, Size(8,8)/*stride of detection window*/);
在每次运行hog.compute()方法后,本次循环结束,需要释放本次循环声明的变量,并析构他的内存空间,也就是析构descriptors向量的空间,就在这个时候程序莫名报错了,跟踪发现是vector析构时出错,在声明descriptors时给定分配空间大小后问题解决:
HOGDescriptor hog; vector<float> descriptors(4000)//64*128图像的默认hog特征参数的描述子向量长度为3780; hog.compute(src/*inputImage*/, descriptors, Size(8,8)/*stride of detection window*/);
这引发了我对vector如何清空其内存空间的思考,梳理总结如下四种清空方法:
STL清空代码总结在GitHub:
https://github.com/Rayholle/LeetCode-Newcoder/blob/master/STL/vector清空的几种方法.cpp
vector<int> vetInt; for(int i = 0; i < 500; i++){ vetInt.emplace_back(i); } int capacity = vecInt.capacity(); //512 int size = vecInt.size(); //500
1、’='赋值操作符重载,赋值新的数组
此时分配空间大小没有变化,数据尺寸变化,说明空间没有回收
vecInt = {1,2,3,4,5,6,7,8,9,0); int capacity = vecInt.capacity(); //512 int size = vecInt.size(); //10
2、vector的clear()方法
此方法清空元素,空间未回收
vecInt.clear(); int capacity = vecInt.capacity(); //512 int size = vecInt.size(); //0
3、vector的erase()方法
此方法清空元素,不回收空间
for(auto it = vecInt.begin(); it!=vecInt.end(); it++) { it = vecInt.erase(iter);//erase自动返回下一个元素的迭代器 } int capacity = vecInt.capacity(); //512 int size = vecInt.size(); //0
4、swap()的方法
此方法可以既清空元素,也可以将vecInt数组内存空间回收
vector<int>().swap(vecInt); int capacity = vecInt.capacity(); //0 int size = vecInt.size(); //0
相关文章推荐
- STL中vector/list的几种赋值方法的速度比较
- C++/STL_中vector基本操作测试代码,vector.erase()使用方法
- STL中vector/list的几种赋值方法的速度比较
- 【STL】根据一段代码总结STL中vector的一些使用方法
- STL删除vector或list的方法及注意的问题
- javascript 注释代码的几种方法总结
- 几种常见的代码重构方法
- iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
- 几种std::vector访问方法的效率
- C++ STL入门教程(1) vector向量容器使用方法
- STL vector清空的几种方法
- linux几种快速清空文件内容的方法
- 介绍几种常用的插值方法以及代码-双三次插值
- 清空 DB2 表中数据的几种方法
- 代码关闭程序的几种方法
- iOS-改变UITextField(纯代码 /xib) 中的Placeholder颜色的几种方法
- C语言数组清空的几种方法比较
- Asp.Net中清空所有textbox的几种方法
- Java代码调用python的几种方法
- STL之vector的几种遍历方式