根据C++ reference,前向迭代器的要求是它支持后增量运算符(即iterator operator++(int)
和
我想知道在自定义前向迭代器上disallow
这个操作是否安全,即
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
,{{1} },sort
等?
关于此问题的官方C ++ 11标准的引用将是最有用的,但是大多数实现的答案都是这样做的,并且"也欢迎。
答案 0 :(得分:4)
所有迭代器必须是可预增量和后增量的。这是输入和输出迭代器的要求的一部分。请参阅C ++11§24.2[iterator.requirements]表107和108.引用表格相当困难,但在两个表中,表达式++r
和r++
必须对迭代器{有效} { {1}}。
所以,不。如果要实现新的迭代器类型,那么该类型的实例必须是前后递增的,并且所有STL算法和任何其他采用迭代器的函数都可以假设后可递增性。
因为迭代器也必须是可复制构造的,所以根据preincrement运算符实现postincrement运算符通常很简单。例如,
r