为什么需要对ForwardIterators建模DefaultConstructible?

Ayj*_*jay 10 c++ iterator

我似乎无法找到任何标准算法来证明默认构造a的要求ForwardIterator.

是否有任何实际原因,或者我可以安全地忽略它?

rod*_*igo 5

它可以为标准算法和客户端用户简化这些迭代器的使用。

例如(请记住,这RandomAccessIterator是 的子类型ForwardIterator):

template <class RandomAccessIterator>
  void sort ( RandomAccessIterator first, RandomAccessIterator last )
{
    RandomAccessIterator pivot, i, j;
    //do your sorting algorithm        
}
Run Code Online (Sandbox Code Playgroud)

如果它们不是默认可构造的,则需要将它们分配给firstlast仅用于编译。

您不需要将其设置为默认值。这种未初始化的迭代器的任何使用都是未定义的。并不是说添加一些检查是不明智的,尤其是在调试版本中。

不,你不应该抛出默认构造函数。它在技术上是一致的,但许多算法会意外失败。