28

当使用循环遍历 aQList<T>时,在我进行的测试中,这些项目的返回顺序与使用标准循环 foreach时的顺序相同。for

我的问题是,对于具有自然顺序(如and )foreach的容器,总是会像这样按索引按数字顺序返回项目吗?例如,以下是否总是等价的?QListQVector

QList<T> list;

for( int i=0; i<list.count(); ++i )
{ 
    // process items in numerical order by index
    // do something with "list[i]";
}

foreach( T item, list )
{ 
    // will items always be processed in numerical order by index?
    // do something with "item";
}
4

2 回答 2

33

foreach宏(aka. Q_FOREACH)使用容器的和begin()迭代end()器请求方法。

因此,如果您的容器是QListorQVector那么您的示例将始终是等效的。您可以在此处foreach查看源代码。

foreach宏虽然不是很好,但它会复制容器 - 所以只能在支持隐式共享的容器上使用。如果可用,请使用 C++11for( : ) {}循环,否则 Boost 具有更好的等效项。

于 2013-05-30T07:29:43.807 回答
3

根据在这里找到的信息,foreach比第一个慢得多,这表明它不等效。

于 2013-05-29T23:24:32.787 回答