根据C++ reference ,前向迭代器的要求是它支持后增量运算符(即 iterator operator++(int)
和
我想知道在自定义前向迭代器上禁止
此操作是否安全,即
custom_iterator operator++(int) = delete; // disallow post-increment, i.e. it++
custom_iterator operator++() { ... } // we only define pre-increment, i.e. ++it
并假设 STL 永远不会在这样的自定义迭代器 it
上调用 it++
,当它作为参数传递给 STL 通用算法(例如 copy)时
、排序
、填充
等?
有关此事的官方 C++11 标准的引述将是最有用的,但也欢迎诸如“大多数实现都这样做”之类的回答。
最佳答案
所有迭代器都必须是前置和后置递增的。这是输入和输出迭代器要求的一部分。请参阅 C++11 §24.2[iterator.requirements] 表 107 和 108。很难引用这些表,但在两个表中,表达式 ++r
和 r++
必须对迭代器 r
有效。
所以,不。如果您要实现一个新的迭代器类型,该类型的实例必须是可前增量和后增量的,并且所有 STL 算法和任何其他采用迭代器的函数都可以假定后增量。
因为迭代器也必须是可复制构造的,所以根据预增量运算符来实现后增量运算符通常是微不足道的。例如,
MyIterator operator++(int)
{
MyIterator original(*this);
++*this;
return original;
}
关于C++:删除自定义迭代器上的后增量运算符是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23305547/