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

Swap std::vector as function parameter

本文关键字:函数 参数 vector std 交换      更新时间:2023-10-16

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

类似这样的东西:

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

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

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

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

有办法做到这一点吗?

使用任何现代编译器,然后您就可以使用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的返回值作为右值,我想这对您没有帮助。