为什么缺少std :: uninitialized_move?

时间:2012-09-20 18:58:41

标签: c++ stl c++11

C ++ 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 个答案:

答案 0 :(得分:26)

您可以使用uninitialized_move获得uninitialized_copy的效果并移动迭代器:

std::uninitialized_copy(std::make_move_iterator(first),
                        std::make_move_iterator(last),
                        out);

std::move即使它也可以用std::copy实现并移动迭代器,因为委员会预计它会频繁使用并决定将其作为便利函数[1] { {3}}