Qt foreach loop ordering for for loop для QList - программирование
Подтвердить что ты не робот

Qt foreach loop ordering for for loop для QList

При повторении с помощью цикла QList<T> с циклом foreach в тестах, которые я провел, элементы возвращаются в том же порядке, что и стандартный цикл for.

Мой вопрос: будет ли foreach всегда возвращать элементы в числовом порядке по индексу, подобному этому, для контейнеров с естественным упорядочением (например, QList и QVector)? Например, следующие всегда эквивалентны?

QList<T> list;

for( int i=0; i<list.count(); ++i )
{ 
    // process items in numerical order by index
    // do something with "list[i]";
}

foreach( T item, list )
{ 
    // will items always be processed in numerical order by index?
    // do something with "item";
}
4b9b3361

Ответ 1

Макрос foreach (aka. Q_FOREACH) использует методы запроса итератора begin() и end() контейнера.

Итак, если ваш контейнер является QList или QVector, ваши примеры всегда будут эквивалентны. Вы можете просмотреть foreach исходный код здесь.

Макрос foreach невелик, но он делает копию контейнера - поэтому используйте только те контейнеры, которые поддерживают неявное совместное использование. Используйте С++ 11 for( : ) {}, если доступно, в противном случае Boost имеет эквивалент, который превосходит.

Ответ 2

На основе найденной информации здесь, foreach намного медленнее первого, что говорит о том, что оно не эквивалентно.