为什么缺少std :: uninitialized_move?

Jar*_*ock 12 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);
Run Code Online (Sandbox Code Playgroud)

没有标准uninitialized_move算法.这是疏忽还是设计?

如果是设计,理由是什么?

R. *_*des 26

你可以获得uninitialized_movewith uninitialized_copy和移动迭代器的效果:

std::uninitialized_copy(std::make_move_iterator(first),
                        std::make_move_iterator(last),
                        out);
Run Code Online (Sandbox Code Playgroud)

std::move虽然它也可以通过std::copy并移动迭代器来实现,因为委员会预计它的使用频繁,并决定将其作为便利功能[1] [2].

  • 实际上它是设计的.指定move/move_backward算法的唯一原因是因为它们的预期使用频率(它们是便利功能).这在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1771.html和http://www.open-std.org/jtc1/sc22/wg21/中有记录.文档/文件/ 2005/n1860.html (9认同)