c++ - STL vector 交换结构 (C++)

标签 c++ stdvector

有什么区别

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

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

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

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

最佳答案

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

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

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

实现方式是:

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

在 C++11 中,您可以在 clear() 之后调用 shr​​ink_to_fit();但这也不能保证释放内存。

关于c++ - STL vector 交换结构 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154172/

相关文章:

c++ - C++ 中的二维对象指针数组

c++ - 为什么投不成功?

c++ - 如何指向数组中的最后一项

c++ - 默认赋值运算符适合 Vector 吗?

c++ - shared_ptrs 被删除两次

c++ - 删除在析构函数中不起作用?

c++ - 什么是 “memory stomp” ?

c++ - 返回 std::vector 时不调用复制构造函数

c++ - 如何将十六进制字符串拆分为 std::vector?

C++:很少改变大小的大型动态结构数组,是否需要 Vector?