Jump to content

Performance Tip Optimizing Iteration

From Qt Wiki
Revision as of 21:18, 28 June 2015 by Wieland (talk | contribs) (Cleanup)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

Here are two tips to help produce code that makes the most out of Qt internal performance.

Iterator selection

Qt allows you to use both Java-style and STL-style iterators to step through your structures. Your selection of iterator style has no performance impact, but your selection of iterator operator does.

Java style iterator:

QListIterator<int> i(list);
while (i.hasNext())
    process(i.next());

STL (Standard Template Library) style iterator:

QList<int>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
    process(*i);

When using STL-style iterators with a list containing complex items, execution is faster if you use the ++i operator instead of the i++ operator. The i++ will force your loop to work on a copy of the item i.

Careful with foreach

Benchmarking Qt applications indicates there is always a performance penalty to using a foreach loop as opposed to a for loop with an iterator. However, you can greatly reduce the performance penalty if you use a const iterator in your foreach loop. This can often make the performance penalty negligible, though it is never zero.

foreach (const QString &i, list)
    process(i);

Additional reading

  1. Kai Köhne's blog, Iterating efficiently