c++ - Qt foreach 循环排序与 QList 的 for 循环

标签 c++ qt for-loop foreach qt4

当迭代 QList<T> 时与 foreach循环,在我进行的测试中,项目以与标准 for 相同的顺序返回环形。

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

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

最佳答案

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

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

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

关于c++ - Qt foreach 循环排序与 QList 的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825376/

相关文章:

c++ - 优先级队列处理优先级的无符号溢出

c++ - 制作工作台类型界面的想法

c++ - 本地线程正在为对象的所有实例显示相同的数据

javascript - for循环在javascript中被跳过

c - 为什么我的 C 程序在第二次调用函数时崩溃?

c++ - 使用 Libc++ undefined reference 使用 Clang 进行编译

c++ - 在集合上使用 lambda 表达式和 find_if

javascript - 如何在函数中使用 for 循环填充两个下拉菜单?

c++ - 如何测试共享对象是32位还是64位?

c++ - Qt:如何创建文件(其路径需要目录)?