QT容器遍历分为Java和STL遍历
STL风格遍历器的语法类似于使用指针对数组的操作。我们可以使用++和--运算符使遍历器移动到下一位置,遍历器的返回值是指向这个元素的指针。例如QVector的iterator返回值是 T *类型,而const_iterator返回值是 const T * 类型(数据为常量,返回值不能修改)。
一个典型的使用STL风格遍历器的代码是:
QList::iterator i = list.begin();
while (i != list.end()) {
*i = qAbs(*i);
++i;
}
对于某些返回容器的函数而言,如果需要使用STL风格的遍历器,我们需要建立一个返回值的拷贝,然后再使用遍历器进行遍历。如下面的代码所示:
QList list = splitter->sizes();
QList::const_iterator i = list.begin();
while (i != list.end()) {
doSomething(*i);
++i;
}
在C++中,很多人都会说,要避免这么写,因为最后一个return语句会进行临时对象的拷贝工作。如果这个对象很大,这个操作会很昂贵。所以,资深的C++高手们都会有一个STL风格的写法:
void sineTable(std::vector &vect)
{
vect.resize(360);
for