Performance Tip Optimizing Iteration: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[Category:Learning]] | [[Category:Learning]] | ||
[[Category:HowTo]] | |||
[[Category:Developing with Qt]] | |||
[toc align_right="yes" depth="2"] | |||
= Performance Tip: Optimizing Iteration = | = Performance Tip: Optimizing Iteration = | ||
Line 9: | Line 12: | ||
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. | 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. | ||
<code>QListIterator | <code>QListIterator<int> i(list); | ||
while (i.hasNext()) | |||
process(i.next()); | |||
</code> | |||
''Java style iterator'' | ''Java style iterator'' | ||
<code>QList | <code>QList<int>::iterator i; | ||
for (i = list.begin(); i != list.end(); ++i) | |||
process('''i); | |||
</code> | |||
''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. | |||
<code>foreach (const QString &i, list) | |||
process(i); | |||
</code> | |||
h2. Additional reading | |||
''' "Iterating efficiently":http://labs.trolltech.com/blogs/2009/01/23/iterating-efficiently/ - Qt Labs blog post |
Revision as of 10:40, 25 February 2015
[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<int> i(list);
while (i.hasNext())
process(i.next());
Java style iterator
QList<int>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
process('''i);
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 &i, list)
process(i);
h2. Additional reading
"Iterating efficiently":http://labs.trolltech.com/blogs/2009/01/23/iterating-efficiently/ - Qt Labs blog post