【问题标题】:Swap std::vector as function parameter交换 std::vector 作为函数参数
【发布时间】:2012-03-03 12:34:05
【问题描述】:

我想换入 std::vector 作为函数参数,这样就不必复制向量。

类似这样的:

function( std::vector< MyType >().swap( my_vector ) );

或者在我的情况下是这样的:

std::make_pair( 0, std::vector< MyType >().swap( my_vector ) );

当然,std::vector::swap 返回的是 void,而不是创建的向量。

有没有办法做到这一点?

【问题讨论】:

  • 你为什么不使用参考?
  • @perreal 因为我无法控制该功能。 (std::make_pair)
  • @Jay:如果函数复制了它的参数,而你不能改变这个函数,就不可能让函数不复制它的参数。 (当然,在std::make_pair 的情况下,有一个版本通过右值引用获取其参数并将它们转发给pair 构造函数,因此移动参数而不是复制它(如果参数是右值引用))

标签: c++ stl parameters parameter-passing stdvector


【解决方案1】:

使用任何现代编译器,然后您可以使用std::move,它将您的向量作为右值返回:

function(std::move(my_vector));

如果您无法使用,您可以尝试以下方法:

template<typename T>
T Move(T & val)
{
    T ret;
    ret.swap(val);
    return ret;
}

如果你有任何运气,请告诉我。

或者,您可以在创建向量后直接将向量交换到对中:

std::pair<int, std::vector<MyType> > p;
p.second.swap(my_vector);

不过,如果您需要 std::make_pair 的返回值作为右值,我想这对您没有帮助。

【讨论】:

  • 我在我的环境中设置 C++11x 时遇到了麻烦,所以我无法测试 std::move,但我相信它会运行良好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2011-01-22
  • 2017-11-08
相关资源
最近更新 更多