将std :: vector作为函数参数交换

时间:2012-02-11 05:05:04

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

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

这样的事情:

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

或者就我而言:

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

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

有办法做到这一点吗?

1 个答案:

答案 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的返回值作为右值,我想这对您没有帮助。

相关问题