Почему std:: uninitialized_move отсутствует?
Стандартная библиотека С++ 11 включает в себя следующие связанные алгоритмы:
template <class InputIterator, class ForwardIterator>
ForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
ForwardIterator result);
template <class ForwardIterator, class T>
void uninitialized_fill(ForwardIterator first, ForwardIterator last,
const T& x);
template<class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last,
OutputIterator result);
template<class ForwardIterator, class T>
void fill(ForwardIterator first, ForwardIterator last, const T& value);
template<class InputIterator, class OutputIterator>
OutputIterator move(InputIterator first, InputIterator last,
OutputIterator result);
Нет стандартного алгоритма uninitialized_move
. Это надзор или по дизайну?
Если это по дизайну, в чем смысл?
Ответы
Ответ 1
Вы можете получить эффект uninitialized_move
с помощью uninitialized_copy
и переместить итераторы:
std::uninitialized_copy(std::make_move_iterator(first),
std::make_move_iterator(last),
out);
std::move
существует, хотя он также может быть реализован с помощью std::copy
и перемещать итераторы, потому что комитет ожидал, что его использование будет частым, и решил предоставить его как функцию удобства [1] [2].