Во многих источниках (книгах или заметках, а также в исходных текстах программ) можно встретить примеры циклов или другие конструкции, в которых применяется операция инкремента, то есть увеличения значения переменной на 1. Например, следующая:
int i = 0;
i = i + 1;
В языках Си и C++ существует также оператор инкремента, делающий, по сути, то же самое (также есть и оператор декремента, т.е. уменьшения значения переменной на 1).
int i = 0;
i++; // значение переменной i теперь 1
Особенность операторов инкремента и декремента состоит в том, что у них есть префиксная (т.е. записанная перед аргументом) и постфиксная (т.е. записанная после аргумента) формы с немного отличающейся семантикой.
Практически во всех примерах, которые можно встретить, используется постфиксная, т.е. записанная после аргумента, форма (см. пример выше).
Однако если Вы были внимательны, то заметили, что в видеуроках я использую префиксную, т.е. записанную перед аргументом, форму оператор инкремента.
int i = 0;
++i; // значение переменной i теперь 1
Так в чем же разница?
Обе формы выполняют одно и то же действие – увеличивают (или уменьшают, если мы говорим о декременте) значение своего аргумента на 1.
Разница в том, что постфиксные формы операторов ++ и -- возвращают исходное (старое) значение, а префиксные – новое.
Чтобы было понятнее, проиллюстрируем сказанное на примере:
int i = 0;
int k = i++; // i = 1, k = 0,
// т.к. постфиксный оператор
// инкремента, увеличивая i на 1,
// возвращает исходное,
// то есть, старое занчения 0
int n = ++i; // i = 2, k = 2
// т.к. префиксный оператор
// инкремента, увеличивая i на 1,
// возвращает новое значение, т.е. 2
В вашем коде лучше всего лучше всего использовать префиксные операторы, если только вам не требуется исходное значение, возвращаемое постфиксной формой. Префиксная форма может оказаться немного эффективнее постфиксной, т.к. не создает нового объекта для временного хранения старого значения переменной.
Пример с циклом for:
for (int i = 0; i < 10; ++i)
{
cout << i << endl;
}
Пример с циклом while:
// имеется некая строка
// необходимо вывести
// строку на экран, пропустив
// пробелы в начале строки
char *str = /*.....*/;
//.....
while (str[i] == ' ')
++i; //пропустить все пробелы
cout << "строка без ведущих пробелов: "
<< str + i << endl;