Performance Tip Optimizing Iteration

From Qt Wiki
Revision as of 10:19, 24 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search




[toc align_right="yes" depth="2"]

Performance Tip: Optimizing Iteration

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.

QListIterator&amp;lt;int&amp;gt; i(list);<br />while (i.hasNext())<br /> process(i.next());<br />

Java style iterator

QList&amp;lt;int&amp;gt;::iterator i;<br />for (i = list.begin(); i != list.end(); ++i)<br /> process('''i);<br />


STL (standard template library) style iterator
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.
h2. 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 &amp;i, list)<br /> process(i);<br />


h2. Additional reading
"Iterating efficiently&quot;:http://labs.trolltech.com/blogs/2009/01/23/iterating-efficiently/ - Qt Labs blog post