4.4 迭代器


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

4.4 迭代器

对于每种容器都有两种风格的迭代器——java风格和STL风格。

Java风格的更易于使用而以很少量性能作为了代价,而STL风格的可以结合STL的算法从而更加强大。


这里我们主讲QList和QMap的迭代器为例。


Java-Style


Java风格的迭代器分为两种:只读迭代器,读写迭代器

只读迭代器就是Q*Iterator<T> (例如QVectorIterator<T>),

而读写迭代器则像QMutable*Iterator<T>这种(例如:QMutableVectorIterator<T>)。


下面是一个典型的使用例子:  

  QList<QString> list;

  list << "A" << "B" << "C" << "D";


  QListIterator<QString> i(list);

  while (i.hasNext())

      qDebug() << i.next();



下面是Mutable iterator读写迭代器使用说明:

QList<int>移除基数项:

  QMutableListIterator<int> i(list);


  while (i.hasNext()) {

      if (i.next() % 2 != 0)

          i.remove();

  }


下面是QMap的迭代器示例,用法和前面是类似的:


  QMap<QString, QString> map;

  map.insert("Paris", "France");

  map.insert("Mexico City", "Mexico");

  map.insert("Moscow", "Russia");


  QMutableMapIterator<QString, QString> i(map);


  while (i.hasNext()) {

      if (i.next().key().endsWith("City"))

          i.remove();

  }


  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-Style

STL风格是迭代器不仅支持Qt的通用算法,还兼容STL的。


和java风格的类似,它也有两种风格的迭代器,只读的(const_iterator)和读写的(iterator)


用过c++ STL库的就对此很容易上手。

下面是QListIterator的例子:


  QList<QString> list;

  list << "A" << "B" << "C" << "D";

  QList<QString>::iterator i;

  for (i = list.begin(); i != list.end(); ++i)

      *i = (*i).toLower();


STL风格的迭代器可允许的位置与java风格的有所不同


好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***