Qt 提供的遍历器

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

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

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

QList<QString> list;
list << "A" << "B" << "C" << "D";
 
QListIterator<QString> i(list);
while (i.hasNext()) {
    qDebug() << i.next();
}
        
QMap<int, QWidget *> map;
QHash<int, QWidget *> hash;
 
QMapIterator<int, QWidget *> i(map);
while (i.hasNext()) {
    i.next();
    hash.insert(i.key(), i.value());
}
    STL 风格的遍历器
        
容器只读遍历器读写遍历器
 QList<T>, QQueue<T>QList<T>::const_iteratorQList<T>::iterator
 QLinkedList<T>QLinkedList<T>::const_iteratorQLinkedList<T>::iterator
 QVector<T>, QStack<T>QVector<T>::const_iteratorQVector<T>::iterator
 QSet<T>QSet<T>::const_iteratorQSet<T>::iterator
 QMap<Key, T>,  QMultiMap<Key, T>QMap<Key, T>::const_iteratorQMap<Key, T>::iterator
 QHash<Key, T>, QMultiHash<Key, T>QHash<Key, T>::const_iteratorQHash<Key, T>::iterator

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

 

  foreach 关键字

如果我们仅仅想要遍历集合所有元素,我们可以使用 Qt 的 foreach 关键字。
foreach 的语法是 foreach (variable, container)。
QLinkedList<QString> list;
...
foreach (const QString &str, list) {
    qDebug() << str;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值