STL向量交换结构(C ++)

时间:2013-06-17 18:21:27

标签: c++ stdvector

之间有什么区别
someVector.clear();
std::vector<int> ().swap(someVector);

someVector.clear();
std::vector<int> (someVector).swap(someVector);

或者他们是否完成同样的事情?

编辑: 目标是释放与someVector相关的记忆。

2 个答案:

答案 0 :(得分:3)

他们都试图清除向量并释放它正在使用的存储。简单地呼叫clear()并不能保证这样做;它可能会保留向量的容量。

在第一种情况下,对clear的调用毫无意义;第二行将向量交换一个空行,然后释放内存。

在第二种情况下,仍无法保证内存将被释放;复制矢量可能会也可能不会保留容量。

这样做的方法是:

std::vector<int> ().swap(someVector);

在C ++ 11中,您可以在shrink_to_fit()之后调用clear();但这也无法保证释放内存。

答案 1 :(得分:0)

第一个创建一个空向量(默认构造函数)并将其与someVector交换;第二个从someVector创建一个向量(复制构造函数)并将其与someVector交换。你的情况没有区别,因为你调用了clear()