Почему 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].