C++ 错误 : no matching function for call to 'std::vector<int>::swap(std::vector<int>)'

标签 c++ vector swap

我正在阅读一篇关于 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/

相关文章:

c++ - Xerces XML 解析器,将 XMLCh* 转换为浮点型

c++ - 文件读取类C++

c++ - 由于编译器优化,代码运行缓慢

c++ - 文件C++中的字符交换

c - C中双链表交换节点

java - bubbleSort 和 swap 方法不起作用 [Java]

c++ - 我如何用 c 中的 switch 翻转我的语句?

c - 什么是 vector 数组?

c++ - 加速 C++(第 3.2.1 节 : vector<double> homework)

c++ - 使用 std::vector::emplace_back