Форум программистов, компьютерный форум CyberForum.ru

Разница между префиксной и постфиксной формой записи счетчика цикла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти количество элементов массива, равных первому элементу http://www.cyberforum.ru/cpp-beginners/thread122150.html
ПОМОГИТЕ ПОЖАЛУЙСТА!!!! 1)Составить программу,которая находит количество элементов,равных первому элементу,и количество элементов,равных последнему,в мвссивах X(n) и Y(M).вычислить количество элементов(оформить в виде таблицы)!!!! 2,Получить квадратную матрицу порядка n. 1 2 3 ... n n n-1 n-3 1 ...
C++ Константы и выражения 1.Записать каждое десятичное число в виде целой десятичной, восьмеричной и шестнадцатеричной константы: 126 10 219 77 2.Записать каждое десятичное число в виде вещественной константы в форме с фиксированной точкой и экспоненциальной форме: 0,4335 4,3*10-2 778 0,005*102 3.еменная объявлена как float S. Определить значение результата каждой операции и значение переменной S... http://www.cyberforum.ru/cpp-beginners/thread122142.html
Выберите названия, содержащие хотя бы одно из заданных ключевых слов. C++
Помогите плиз решить задачу на С++ Заданный набор ключевых слов, а также текст, в котором хранится длинный список названий книг и научных работ. Выберите названия, содержащие хотя бы одно из заданных ключевых слов.
записать каждое десятичное C++
1. Записать каждое десятичное число в виде целой десятичной, восьмеричной и шестнадцатеричной константы: 55 219 143 79 2. Записать каждое десятичное число в виде вещественной константы в форме с фиксированной точкой и экспоненциальной форме: 99*10-1 1340 9,865 10000 3. Переменная объявлена как int S. Определить значение результата каждой операции и значение переменной S после...
C++ Как сделать, чтоб после появления нового символа, предыдущий менялся на пробел http://www.cyberforum.ru/cpp-beginners/thread122114.html
Есть цикл вот такой: int main() { string b,c; b = "+"; c = " "; int a = 0; for(int i = 0;i<=100000000;i++) {
C++ Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. Помогите решить :) подробнее

Показать сообщение отдельно
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 426
25.02.2016, 09:08     Разница между префиксной и постфиксной формой записи счетчика цикла
Рассматривать стоит, например, такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <vector>
 
int main() {
 
  std::vector<int> v {0,1,2,3,4,5,6};
  int s=0;
  for(auto i=v.cbegin(); i<v.cend(); i++) { // ++i
    s+=*i;
  }
  std::cout << s << std::endl;
 
}
При выключенной оптимизации он даст немного разный код. При оптимизации компилятор может знать, что ++i для данного итератора делает тоже но быстрее и заменит на него (а если ещё это inline, то оптимизирует ещё лучше). Но если он ничего не знает об итераторе, то выставит то, что уже есть. А теперь посмотрим на стандартный пример реализации инкремента:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Number 
{
    public:
        Number& operator++ ()     // prefix ++
        {
           // Do work on this.   (increment your object here)
           return *this;
        }
 
        // You want to make the ++ operator work like the standard operators
        // The simple way to do this is to implement postfix in terms of prefix.
        //
        Number  operator++ (int)  // postfix ++
        {
           Number result(*this);   // make a copy for result
           ++(*this);              // Now use the prefix version to do the work
           return result;          // return the copy (the old) value.
        }
};
Вспомогательный объект создан внутри Number++!!! И если его реализация скрыта (т.е. в другом файле), то компилятор не сможет оптимизировать код. Кроме этого никто не обязан давать одинаковый результат для {++i;} и {i++;}.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru