【问题标题】:Why is std::uninitialized_move absent?为什么 std::uninitialized_move 不存在?
【发布时间】:2012-09-20 18:58:40
【问题描述】:

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 算法。这是疏忽还是设计使然?

如果是有意为之,原理是什么?

【问题讨论】:

  • std::move_if()std::move_n() 也是如此,顺便说一句。
  • 请注意,std::uninitialized_move 出现在 C++17 中。不幸的是,没有std::uninitialized_move_if_noexcept

标签: c++ stl c++11


【解决方案1】:

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

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

std::move 存在,尽管它也可以用std::copy 和移动迭代器实现,因为委员会预计它的使用会很频繁,并决定将它作为一个方便的函数[1][2] 提供。

【讨论】:

猜你喜欢
  • 2018-12-03
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多