Поменяйте местами std :: vector как параметр функции - PullRequest
4 голосов
/ 11 февраля 2012

Я хотел бы заменить std::vector как параметр функции, чтобы вектор не копировался.

Примерно так:

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

Или в моем случае так:

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

Но, конечно, std::vector::swap возвращает void, а не созданный вектор.

Есть ли способ сделать это?

1 Ответ

3 голосов
/ 11 февраля 2012

Используйте любой современный компилятор, затем вы можете использовать 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 в качестве значения.

...