选项1:
vector vec; /* ... .. ... */ for (auto itr = vec.begin(); itr != vec.end(); itr++) { itr->print(); }
选项2:
vector vec; /* ... .. ... */ for (auto itr = vec.begin(); itr != vec.end(); ++itr) { itr->print(); }
我的意思是,我知道它们会提供相同的输出,但是它们在性能方面有什么区别吗?
尽管这两个选项都可以完成相同的事情,但是从性能的角度来看,第二个选项更好。这是因为后增量运算符(即,itr ++)比前增量运算符(即,++ itr)更昂贵。后递增运算符的基础实现在递增元素之前先对其进行复制,然后返回该副本。
也就是说,许多编译器会通过将第一个选项转换为第二个选项来自动优化。