我似乎找不到任何标准的算法来证明默认构造一个ForwardIterator的需求.
有没有什么实际的理由呢,还是安全的呢?
解决方法
在这里,为了简化对这两种标准算法和客户端用户的这些迭代器的使用.
例如(记住RandomAccessIterator是ForwardIterator的子类型):
template <class RandomAccessIterator> void sort ( RandomAccessIterator first,RandomAccessIterator last ) { RandomAccessIterator pivot,i,j; //do your sorting algorithm }
如果它们不是默认构造的,那么您需要将它们分配给第一个或最后一个,以供编译.
您不需要将其设置为默认值.任何使用这种未初始化的迭代器是未定义的.不是添加一些检查是不明智的,特别是在调试版本中.
而不,你不应该抛出默认构造函数.它在技术上是一致的,但是许多算法将意外失败.