3
  1. auto& myKey = myMap.rbegin()->first;
  2. auto& myKey = std::prev(myMap.end())->first;

myMap是一个常数有序映射。这两种方法都具有恒定的复杂性。rbegin()使用反向迭代器,而std::prev适用于双向迭代器。它们之间有效率差异吗?

4

1 回答 1

2

的典型实现rbegin()

reverse_iterator rbegin()
{
    return reverse_iterator(end());
}

这与做std::prev(myMap.end()). 因此,理论上它们是相同的。然而,这reverse_iterator对编译器优化器来说往往更难一些。如果您很在意,我建议您在编译器中跟踪实际的发布模式程序集(或生成程序集输出),看看是否存在差异。

于 2016-03-12T06:45:10.773 回答