Qt 提供的遍历器

Qt 提供了顺序存储容器:QList,QLinkedList, QVector, QStack和QQueue,
 还提供了关联容器:QMap, QMultiMap, QHash, QMUltiHash和QSet。
  • QList:这是至今为止提供的最通用的容器类。它将给定的类型 T 的对象以列表的形式进行存储,与一个整型的索引关联。QList 在内部使用数组实现,同时提供基于索引的快速访问。我们可以使用 QList::append() 和 QList::prepend() 在列表尾部或头部添加元素,也可以使用 QList::insert() 在中间插入。相比其它容器类,QList 专门为这种修改操作作了优化。QStringList 继承自 QList
  • QLinkedList:类似于 QList,除了它是使用遍历器进行遍历,而不是基于整数索引的随机访问。对于在中部插入大量数据,它的性能要优于 QList。同时具有更好的遍历器语义(只要数据元素存在,QLinkedList 的遍历器就会指向一个合法元素,相比而言,当插入或删除数据时,QList 的遍历器就会指向一个非法值)。
  • QVector:用于在内存的连续区存储一系列给定类型的值。在头部或中间插入数据可能会非常慢,因为这会引起大量数据在内存中的移动。
  • QStack:这是 QVector 的子类,提供了后进先出(LIFO)语义。相比 QVector,它提供了额外的函数:push(),pop() 和 top()。
  • QQueue:这是 QList 的子类,提供了先进先出(FIFO)语义。相比 QList,它提供了额外的函数:enqueue(),dequeue() 和 head()。
  • QSet:提供单值的数学上面的集合,具有快速的查找性能。
  • QMap:提供了字典数据结构(关联数组),将类型 T 的值同类型 Key 的键关联起来。通常,每个键与一个值关联。QMap 以键的顺序存储数据;如果顺序无关,QHash 提供了更好的性能。
  • QMultiMap:这是 QMap 的子类,提供了多值映射:一个键可以与多个值关联。
  • QHash:该类同 QMap 的接口几乎相同,但是提供了更快的查找。QHash 以字母顺序存储数据。
  • QMultiHash:这是 QHash 的子类,提供了多值散列。   
Qt 的容器类提供了两种风格的遍历器:Java 风格和 STL 风格。这两种风格的遍历器在通过非 const 函数对集合进行修改时都是不可用的。
        Java 风格的遍历器
         
容器 只读遍历器 读写遍历器
QList, QQueue QListIterator QMutableListIterator
QLinkedList QLinkedListIterator QMutableLinkedListIterator
QVector, QStack QVectorIterator QMutableVectorIterator
QSet QSetIterator QMutableSetIterator
QMap, QMultiMap QMapIterator QMutableMapIterator
QHash, QMultiHash QHashIterator QMutableHashIterator

    Java 风格的遍历器指向的是两个元素之间的位置,而不是指向元素本身。

    因此,它们可能会指向集合第一个元素之前的位置,也可能指向集合的最后一个元素之后的位置。

QList list;
list << "A" << "B" << "C" << "D";
 
QListIterator i(list);
while (i.hasNext()) {
    qDebug() << i.next();
}
        
QMap map;
QHash hash;
 
QMapIterator i(map);
while (i.hasNext()) {
    i.next();
    hash.insert(i.key(), i.value());
}
    STL 风格的遍历器
        
容器 只读遍历器 读写遍历器
 QList, QQueue QList::const_iterator QList::iterator
 QLinkedList QLinkedList::const_iterator QLinkedList::iterator
 QVector, QStack QVector::const_iterator QVector::iterator
 QSet QSet::const_iterator QSet::iterator
 QMap,  QMultiMap QMap::const_iterator QMap::iterator
 QHash, QMultiHash QHash::const_iterator QHash::iterator

            STL 风格的遍历器具有类似数组指针的行为。例如,我们可以使用 ++ 运算符让遍历器移动到下一个元素,使用 * 运算符获取遍历器所指的元素。

 

  foreach 关键字

如果我们仅仅想要遍历集合所有元素,我们可以使用 Qt 的 foreach 关键字。
foreach 的语法是 foreach (variable, container)。
QLinkedList list;
...
foreach (const QString &str, list) {
    qDebug() << str;
}

你可能感兴趣的:(Qt)