iterator Class▲
-
Header: iterator
-
qmake: QT += core
Detailed Description▲
QLinkedList features both STL-style iterators and Java-style iterators. The STL-style iterators are more low-level and more cumbersome to use; on the other hand, they are slightly faster and, for developers who already know STL, have the advantage of familiarity.
QLinkedList<T>::iterator allows you to iterate over a QLinkedList<T> and to modify the list item associated with the iterator. If you want to iterate over a const QLinkedList, use QLinkedList::const_iterator instead. It is generally good practice to use QLinkedList::const_iterator on a non-const QLinkedList as well, unless you need to change the QLinkedList through the iterator. Const iterators are slightly faster, and can improve code readability.
The default QLinkedList::iterator constructor creates an uninitialized iterator. You must initialize it using a function like QLinkedList::begin(), QLinkedList::end(), or QLinkedList::insert() before you can start iterating. Here's a typical loop that prints all the items stored in a list:
QLinkedList<QString> list;
list.append("January");
list.append("February");
...
list.append("December");
QLinkedList<QString>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
cout << *i << endl;STL-style iterators can be used as arguments to generic algorithms. For example, here's how to find an item in the list using the qFind() algorithm:
QLinkedList<QString> list;
...
QLinkedList<QString>::iterator it = qFind(list.begin(),
list.end(), "Joel");
if (it != list.end())
cout << "Found Joel" << endl;Let's see a few examples of things we can do with a QLinkedList::iterator that we cannot do with a QLinkedList::const_iterator. Here's an example that increments every value stored in a QLinkedList<int> by 2:
QLinkedList<int>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
*i += 2;Here's an example that removes all the items that start with an underscore character in a QLinkedList<QString>:
QLinkedList<QString> list;
...
QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
if ((*i).startsWith('_'))
i = list.erase(i);
else
++i;
}The call to QLinkedList::erase() removes the item pointed to by the iterator from the list, and returns an iterator to the next item. Here's another way of removing an item while iterating:


