我正在阅读一篇关于 std::vector 的博客。请参阅此 website 中的交换内容部分.
基本上,它说的是swap()
的一个普通应用方法强制 vector 释放它持有的内存。但是在我运行下面的代码之后,我得到了错误 Error: no matching function for call to 'std::vector<int>::swap(std::vector<int>)'|
.哪里出了问题?
#include <iostream>
#include <vector>
int main( )
{
std::vector<int> v;
v.push_back(1); v.push_back(2);
v.clear();
v.swap(std::vector<int>(v));
return 0;
}
最佳答案
std::vector::swap的参数类型是非常量左值引用(即 vector&
)。但是std::vector<int>(v)
是一个临时对象,不能绑定(bind)到非常量引用。
这意味着当使用“swap trick”时,你应该把临时的放在左边:
std::vector<int>(v).swap(v);
从 C++11 开始,您可以使用 std::vector::shrink_to_fit请求移除未使用的容量;请注意,这是一个非约束性请求,效果取决于实现。
关于C++ 错误 : no matching function for call to 'std::vector<int>::swap(std::vector<int>)' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40315075/