c++ - 为什么在使用 map.begin() 时迭代器会预递增?

标签 c++ stl iterator increment pre-increment

<分区>

http://www.cplusplus.com/reference/map/map/begin/ 的示例中

// map::begin/end
#include <iostream>
#include <map>

int main ()
{
  std::map<char,int> mymap;
  std::map<char,int>::iterator it;

  mymap['b'] = 100;
  mymap['a'] = 200;
  mymap['c'] = 300;

  // show content:
  for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';

  return 0;
}

为什么在 for 循环中迭代器 it 是预递增的?

最佳答案

BoBTFish's comment是对的:使用预增量是因为你是那样写的。在我的其余回答中,我将解释为什么此选项是首选,即,这是推荐的做法。

递增前迭代器的值未在表达式点使用。该表达式只想增加迭代器,而不使用其先前的值。

在这种情况下,前置自增运算符恰到好处,应该优先考虑。它省去了后增量运算符始终存在的增量前存储值的要求。

关于c++ - 为什么在使用 map.begin() 时迭代器会预递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17613064/

相关文章:

c++ - 获取事件 udp 连接的目标 IP/端口?

c++ - QXmlStreamReader 说我在 XML 文件的末尾,而在它的中间

c++ - 使用具有可定义状态的仿函数作为 unordered_set 哈希函数

java - Java 中 HashMap 的迭代器

c++ - 奇异迭代器的赋值

c++ - 错误-根据g++未声明继承的类字段

c++ - 执行自定义qdialog

c++ - 可以在一个文件中定义两个 `istream_iterator` 吗?

c++ - 类的 unique_copy 无法识别运算符<

c++ - 我怎么知道我的迭代器是否递减超过了我的 vector 的开头?