我想交换一个std::vector
作为函数参数,这样就不必复制向量。
这样的事情:
function( std::vector< MyType >().swap( my_vector ) );
或者就我而言:
std::make_pair( 0, std::vector< MyType >().swap( my_vector ) );
但当然std::vector::swap
返回void,而不是创建的矢量。
有办法做到这一点吗?
答案 0 :(得分:3)
使用任何现代编译器,然后你可以使用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
的返回值作为右值,我想这对您没有帮助。