C++ C+中删除向量及其内容的有效方法+;

C++ C+中删除向量及其内容的有效方法+;,c++,vector,C++,Vector,我有vector图像vector。 我想删除向量及其内容。 我知道一些方法。 我想知道哪个更有效。 是的 (1)images.erase(); (2)images.clear(); vector<Mat>().swap(images); (3)for(unsigned int l = 0; l < images.size(); l++){ images[l].release(); } (1)images.erase(); (2) 图像。清除();

我有
vector图像
vector。 我想删除向量及其内容。 我知道一些方法。 我想知道哪个更有效。 是的

(1)images.erase();
(2)images.clear();
   vector<Mat>().swap(images);
(3)for(unsigned int l = 0; l < images.size(); l++){
        images[l].release();
   }
(1)images.erase();
(2) 图像。清除();
向量()交换(图像);
(3) for(unsigned int l=0;l

谢谢

清除将是最快的一个,因为它将保留分配的内存,因此,如果您计划重用该向量,那么这是最好的选择

而交换技巧将强制向量释放内存,这在技术上应该较慢


当然,只有在Mat类具有编写良好的析构函数时,才能使用swap或clear,否则需要循环并释放它们,然后清除向量。

您要求的是最“有效的”。你的意思可能是“高效”。最“有效”的方法是在大多数情况下做你想做的事情,清除那个向量

这就是
clear()
方法,因为
erase()
增加了对项目的要求,即它不太普遍适用

[1] cppreference.com关于
擦除
T必须满足可移动和可分配的要求

可能
Mat
是可移动分配或可复制的,但如果不是,则不能使用
erase


方法3,循环所有向量项,并使用特定于项的方式将每个项返回到可破坏的nullstate/emptystate,显然效果最差,因为它只适用于具有nullstate/emptystate的项类型。请注意,由于示例中未包含该值,因此需要在该值之后调整向量大小


如果不是“有效”,而是指“有效”,那么这一切都取决于类型
Mat
、编译器对
std::vector
的实现、编译器选项、程序运行的环境等。也就是说,您除了测量之外别无选择。测量的一个很好的结果是,您发现不需要特别的优化,因此您很可能只需要使用
clear
作为最清晰的方式,这通常是最重要的。;-)


[1] 在()。

这是局部变量吗?班级成员?全局变量?它们是Main()中的局部变量。当向量超出范围时,它将被销毁,并且没有其他方法来销毁向量。(但是,你可以销毁它的内容)我想,这个问题要么是通过使用
std:vector::clear()
显然得到了回答,要么是作为@BillLynch的复制品,我认为是不同的。