Russian Qt Forum

Программирование => С/C++ => Тема начата: fisenkdima от Ноябрь 03, 2012, 15:50



Название: (С++) Различия между ++i и --i
Отправлено: fisenkdima от Ноябрь 03, 2012, 15:50
В данный момент читаю книгу по Qt авторства Макса Шлее, наткнулся на следующее утверждение:

Код:
for (;it!=vec.begin();++it)
{
      qDebug()<<*it;
}

... при прохождении элементов в обратном порядке при помощи оператора -- необходимо помнить, что он не симметричен с прохождением при помощи оператора ++. Поэтому цикл должен в этом случае выглядеть следующим образом:
QVector<QString>::iterator it=vec.end();
Код:
for (;it!=vec.begin();)
{
      --it;
      qDebug()<<*it;
}
Вопрос же заключается в следующем:
Что мешает нам поместить --it в заголовок for (или как еще можно назвать круглые скобки после for)?


Название: Re: (С++) Различия между ++i и --i
Отправлено: Igors от Ноябрь 03, 2012, 16:06
Что мешает нам поместить --it в заголовок for (или как еще можно назвать круглые скобки после for)?
Код
C++ (Qt)
for (;it!=vec.begin(); --it)
 
Просто неверно. Сначала проверяется условие, потом (если условие Ok) выполняется тело цикла, и только потом декремент.

Лучше заняться языком (вместо шлеев)  :)


Название: Re: (С++) Различия между ++i и --i
Отправлено: fisenkdima от Ноябрь 03, 2012, 16:13
Благодарю за совет и за пояснение.
Я изучал синтаксис относительно недавно и почему-то не обратил внимание на порядок выполнения действий у оператора for -__-
Впредь буду внимательнее.


Название: Re: (С++) Различия между ++i и --i
Отправлено: Anchorite от Ноябрь 06, 2012, 15:28
Просто QVector::begin() и QVector::end() определяют полуоткрытый интервал.
QVector::end() "указывает" не на последний элемент вектора, а на элемент находящийся за ним.
Именно поэтому при прохождении элементов QVector в обратном порядке сначала необходимо произвести декремент итератора.