Есть ли алгоритм перемещения диапазонов? - PullRequest
5 голосов
/ 16 января 2010

В C ++ 98 я могу копировать диапазоны с помощью алгоритма std::copy.

std::copy(source.begin(), source.end(), destination.begin());

Есть ли в C ++ 0x алгоритм, который перемещает элементы от источника к месту назначения?Или std::copy как-то перегружен, чтобы принимать что-то вроде итераторов rvalue - есть ли такая вещь?

Алгоритм может выглядеть примерно так:

#include <utility>

template<class InputIterator, class OutputIterator>
OutputIterator mooove(InputIterator first, InputIterator last, OutputIterator result)
{
    for (; first != last; ++first, ++last) *result = std::move(*first);
    return result;
}

Ответы [ 3 ]

5 голосов
/ 16 января 2010

Похоже, что в последний черновик (см. Раздел 25.3.2).

У меня есть печатная копия C ++ 03, которая точно такая же, как C ++ 98 (разделы 25.2.x), где вы можете увидеть те же алгоритмы (очевидно, без 'move').

2 голосов
/ 16 января 2010

Существует также адаптер итератора, std::move_iterator, который можно использовать для адаптации любого алгоритма диапазона, который вместо этого создает копии для перемещения элементов. std::move(first, last, dest) - это просто удобная оболочка для наиболее распространенного варианта использования - она ​​семантически эквивалентна std::copy(std::move_iterator(first), std::move_iterator(last), dest).

0 голосов
/ 16 января 2010

Просто потому, что эта страница сейчас немного сбивает с толку ... Существует std::move( first, last, dest ), OP просто растерялся, посмотрев на старый черновик C ++ 0x. Функция определяется разделом 25.3.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...