0

和有什么区别

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

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

还是他们完成同样的事情?

编辑:目标是释放与 someVector 关联的内存。

4

2 回答 2

3

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

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

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

这样做的方法是:

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

在 C++11 中,您也可以调用shrink_to_fit()after clear(); 但这也不能保证释放内存。

于 2013-06-17T18:41:38.743 回答
0

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

于 2013-06-17T18:34:05.157 回答