Qt为QList预测循环排序与循环

时间:2013-05-29 23:05:31

标签: c++ qt for-loop foreach qt4

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

我的问题是,对于具有自然排序的容器(如foreachQList),QVector是否总是按照这样的索引按数字顺序返回项目?例如,以下总是等效吗?

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";
}

2 个答案:

答案 0 :(得分:32)

foreach宏(又名。Q_FOREACH)使用容器的begin()end()迭代器请求方法。

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

虽然foreach宏不是很好,它会创建容器的副本 - 所以只能在支持隐式共享的容器上使用。如果可用,请使用C ++ 11 for( : ) {}循环,否则Boost具有优越的等价物。

答案 1 :(得分:4)

根据找到的信息hereforeach比第一个慢得多,这表明它不等同。