因此,迭代器很少 与QList有关。一 STL样式迭代器的位置 有意义的是作为泛型
的参数
http://doc.qt.digia.com/4.2/qlist-iterator.html
因此,如果我有一个for循环,那么宏foreach不是一个选项。我应该使用迭代器还是索引?
for(int i = 0; i < list.size(); i++) {
Do something with list[i]
blah blah blah
}
for(QList<type>::iterator i = list.begin(); i != list.end(); ++i) {
Do something with *i
blah blah blah
}
答案 0 :(得分:3)
Qt拥有自己的foreach宏。我也想不出为什么foreach不是一个选择的原因......
最重要的区别在于您是否需要修改循环中的列表内容,因为使用索引API可能会更难以阅读。
如果您只想为我有这些偏好的每件物品做点什么:
但这只是一个风格问题。如果这对性能至关重要,那么您需要担心细微的差异,您应该考虑重新设计或编写自己的专业列表。
答案 1 :(得分:2)
我认为这取决于“等等等等”真正做到了什么,但通常我会选择后一种形式与std::foreach
功能相结合,但我认为这只是品味问题。
顺便说一下,当你写宏foreach时,你的意思是std::foreach
吗?如果是这样,请注意它不是一个宏。
答案 2 :(得分:2)
我还会考虑两个版本之间的性能损失。不断计算list [i]比计算++ i一次要昂贵得多。如果你真的想使用索引表示法并且不会遭受太多性能损失,我建议在那里抛出一个引用来保存它。
for(int i = 0; i < list.size(); ++i) {
ListItem &list_item = list[i];
// do something with list_item
}
[我也使用++ i而不是i ++,因为它通常被认为更快。]
答案 3 :(得分:1)
在这个具体的例子中,没有太大的区别。
除此之外,学习使用stl类型的迭代器总是一个好主意,但是当你开始学习stl算法时,它们特别方便,就像foreach
一样。但请不要就此止步 - 当然要选择transform
,sort
,remove_copy_if
等等。
毕竟,他们是标准库的一部分!