我正在迭代双向数据结构。我可以使用(++
,--
)或(std::prev
,std::next
,std::advance
)来实现。稍后使用是否有优势?
答案 0 :(得分:12)
他们稍微做了不同的事情。所以一般来说都不是更好。
特别是std::prev
不会修改itr
。因此,当itr
不应该或不能(见S.M。的答案,例如后者)被修改时,情况会更好。 --itr
和std::advance
会修改itr
,因此在必须修改itr
时它们会更好。
std::prev
和std::advance
优于--itr
的优势在于它们的参数n
,可以避免在需要推进多个步骤时编写循环。如果迭代器是随机访问,它们比循环更有效。
答案 1 :(得分:4)
我认为cppreference.com中描述的优点很好。例如,std::prev
具有以下优势:
虽然表达式
--c.end()
经常编译,但不能保证 这样做:c.end()
是一个右值表达式,没有迭代器 指定rvalue的减量得到保证的要求 上班。特别是,当迭代器实现为指针时,--c.end()
不会编译std::prev(c.end())
。