今天小编给大家分享一下Qt的遍历迭代器如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。
对容器进行遍历通常会使用迭代器,迭代器提供了一个统一的方法来访问容器中的项目。Qt的容器类提供了两种类型的迭代器,一个是Java风格迭代器,一个是STL风格迭代器。一般C++程序员会比较习惯使用STL风格迭代器。如果只想按顺序遍历一个容器中的项目的话,还可以使用Qt的foreach关键字。
每一个容器类都有两个STL风格迭代器类型,一个提供只读访问,一个提供读/写访问。只读迭代器要比读/写迭代器快很多,所以尽可能使用只读迭代器。
只读迭代器:“容器类型”::const_iterator;例如:QList<QString>::const_iterator、QMap<QString, int>::const_iterator。
读/写迭代器:“容器类型”::iterator;例如:QVector<QString>::iterator、QHash<QString, int>::iterator。
使用方法:
QList<QString> list; list<<"A"<<"B"<<"C"<<"D"; //只读迭代器 QList<QString>::iterator iter; for(iter = list.begin(); iter != list.end(); ++iter) { qDebug() <<*iter; } //读/写迭代器 QList<QString>::const_iterator constIter; for(constIter = list.constBegin(); constIter != list.constEnd(); ++constIter) { qDebug() << *constIter; }
其他:
STL风格迭代器的API模仿了数组的指针,例如,使用“++”操作符来向后移动迭代器使其指向下一个项目、使用“*”操作符返回迭代器指向的项目等。
STL风格迭代器是直接指向项目的。begin()函数返回容器中的第一个项目,end()函数返回容器最后一个项目的下一个假想的虚项目,这个项目标志着一个无效的位置,当列表为空时,begin()函数等价于end()函数。
STL风格迭代器中的“++”和“--”操作符既可以作为前缀(++iter,--iter)操作符,也可以作为后缀(i++,i--)操作符。当作为前缀时会先修改迭代器,然后返回修改改后的迭代器的一个引用;当作为后缀时,在修改迭代器以前会对其进行复制,然后返回这个复制。如果在表达式中不对返回值进行处理,那么最好使用前缀操作符,这样会更快一些。
STL风格迭代器常用API:
表达式 | 行为 |
---|---|
*i | 返回当前项目 |
++i | 移动迭代器到下一个项目 |
i += n | 使迭代器向后移动n个项目 |
--i | 移动迭代器到上一个项目 |
i -= n | 使迭代器向前移动n个项目 |
i-j | 返回迭代器i和迭代器j之间的项目的数目 |
foreach关键字是Qt向C++语言中添加的一个用来进行容器顺序遍历的关键字。
使用方法:
QList<QString> list; list<<"A"<<"B"<<"C"<<"D"; foreach(QString str, list) { qDebug() << str; }
foreach其实是for循环的一个特殊简化版,写法类似于C++11中for的新写法,只不过foreach两个参数中间是“,”,C++11的for是“:”。
foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高。
在foreach循环中也可以使用break和continue语句。
以上就是“Qt的遍历迭代器如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。