哪个更好std :: prev(itr)或--it?

时间:2018-04-10 14:26:21

标签: c++ stl iterator

我正在迭代双向数据结构。我可以使用(++--)或(std::prevstd::nextstd::advance)来实现。稍后使用是否有优势?

2 个答案:

答案 0 :(得分:12)

他们稍微做了不同的事情。所以一般来说都不是更好。

特别是std::prev不会修改itr。因此,当itr不应该或不能(见S.M。的答案,例如后者)被修改时,情况会更好。 --itrstd::advance会修改itr,因此在必须修改itr时它们会更好。

std::prevstd::advance优于--itr的优势在于它们的参数n,可以避免在需要推进多个步骤时编写循环。如果迭代器是随机访问,它们比循环更有效。

答案 1 :(得分:4)

我认为cppreference.com中描述的优点很好。例如,std::prev具有以下优势:

  

虽然表达式--c.end()经常编译,但不能保证   这样做:c.end()是一个右值表达式,没有迭代器   指定rvalue的减量得到保证的要求   上班。特别是,当迭代器实现为指针时,   --c.end()不会编译std::prev(c.end())