Это действительно не имеет значения . Скорее всего, если ваша программа работает медленно, это не проблема. Однако следует отметить, что вы не проводите абсолютно равное сравнение. Qt's foreach
больше похоже на это (в этом примере будет использоваться QList<QString>
):
for(QList<QString>::iterator it = Con.begin(); it != Con.end(); ++it) {
QString &str = *it;
// your code here
}
Макрос может сделать это, используя некоторые расширения компилятора (например, GCC __typeof__
), чтобы получить тип переданного контейнера. Также представьте, что Boost's BOOST_FOREACH
очень похож на концепцию.
Причина, по которой ваш пример несправедлив, заключается в том, что ваша не-Qt версия добавляет дополнительную работу.
Вы индексируете, а не выполняете итерацию. Если вы используете тип с несмежным распределением (я подозреваю, что это может быть в случае QList<>
), тогда индексирование будет более дорогим, поскольку код должен вычислять «где» n-й элемент.
Это, как говорится. Это все еще не имеет значения. Разница во времени между этими двумя частями кода будет незначительной, если она вообще существует. Не тратьте свое время на беспокойство. Напишите, что вы найдете более ясным и понятным.
РЕДАКТИРОВАТЬ: В качестве бонуса, в настоящее время я решительно поддерживаю версию итерации контейнера C ++ 11, она чиста, лаконична и проста:
for(QString &s : Con) {
// you code here
}