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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.85
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
#1

i++ vs ++i (циклы) - C++

11.06.2011, 15:05. Просмотров 4411. Ответов 46
Метки нет (Все метки)

Собстно стало интересно почему все пишут
C++
1
2
3
for(ptrdiff i = 0; i < 10; i++) {
 
}
постфиксный инкремент медленнее, а в данном случае в нем смысла я не вижу. для красоты что ли?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2011, 15:05     i++ vs ++i (циклы)
Посмотрите здесь:

Циклы - C++
Воозникли трудности. Можете помочь ?) Необходимо протабулировать функции, зависящее от 2 переменных или от нескольких параметров....

циклы - C++
помогите вывести таблицу 4 3 2 1 0 3 2 1 0 2 1 0 1 0 0

Циклы - C++
В последовательности символов выдать на печать TRUE, если значение последнего символа равно F Помогите пожалуйста

На циклы do while - C++
даны два действительных числа а1,а2,... . Известно, что а1&gt;0 и что среди а2,а3,... есть хотя бы одно отрицательное число. Пусть а1,...,аn -...

циклы - C++
вывести на экран все целые числа из диапазона от А до Б, кратные трем (А&lt;=B)

циклы do while - C++
do { if (a&gt;=b) a%=b; else b%=a; } while (a*b&gt;0); объясните...

циклы for, while - C++
for: Среди всех n-значных чисел (n = 1,2,3,4) указать те, сумма цифр которых равна данному числу k. while: Дано натуральное число n....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.06.2011, 15:09     i++ vs ++i (циклы) #2
Цитата Сообщение от Saiberg Посмотреть сообщение
постфиксный инкремент медленнее
???
По идее разницы в бинарном коде быть не должно, так что для красоты.
Лично я пишу постфиксный из-за билдера, там если поставить for и пробел, то автоматически вставляется цикл с постфиксным инкрементом... =)
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
11.06.2011, 15:12     i++ vs ++i (циклы) #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Для _не_ встроеных типов принципиально писать префиксный, так как постфиксная запись предполагает создание временного объекта.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.06.2011, 17:41     i++ vs ++i (циклы) #4
Цитата Сообщение от Saiberg Посмотреть сообщение
постфиксный инкремент медленнее
чушь, для стандартных типов нет разницы в скорости
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 17:46     i++ vs ++i (циклы) #5
Maxwe11, есть, просто компиляторы обычно оптимизируют код по их желанию, в таких случаях как for , поэтому разницы и не видно становится
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.06.2011, 18:03     i++ vs ++i (циклы) #6
OstapBender, в ассемблерных командах нет разницы(в скорости) между постфиксом и префиксом и это не зависит от компилятора
Код
int i = 0, j = 0;
00ED139E  mov         dword ptr [i],0  
00ED13A5  mov         dword ptr [j],0  
     7: 	i++;
00ED13AC  mov         eax,dword ptr [i]  
00ED13AF  add         eax,1  
00ED13B2  mov         dword ptr [i],eax  
     8: 	++j;
00ED13B5  mov         eax,dword ptr [j]  
00ED13B8  add         eax,1  
00ED13BB  mov         dword ptr [j],eax
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 18:07     i++ vs ++i (циклы) #7
Maxwe11,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
    v=i++;
004113D3  mov         eax,dword ptr [i] 
004113D6  mov         dword ptr [v],eax 
004113D9  mov         ecx,dword ptr [i] 
004113DC  add         ecx,1 
004113DF  mov         dword ptr [i],ecx 
 
    v=++j;
004113E2  mov         eax,dword ptr [j] 
004113E5  add         eax,1 
004113E8  mov         dword ptr [j],eax 
004113EB  mov         ecx,dword ptr [j] 
004113EE  mov         dword ptr [v],ecx
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.06.2011, 18:09     i++ vs ++i (циклы) #8
OstapBender, где отличие в скорости?
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 18:11     i++ vs ++i (циклы) #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
лады, учту

хотя вот провел тестик
C
1
2
3
4
5
6
7
    int v=0;
 
    for (int i=0; i<INT_MAX/2; )
        v=++i; 
 
 
    std::cout << (double)clock()/CLOCKS_PER_SEC;
выдает 2.328
C
1
2
3
4
5
6
7
    int v=0;
 
    for (int i=0; i<INT_MAX/2; )
        v=i++; 
 
 
    std::cout << (double)clock()/CLOCKS_PER_SEC;
2.593
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
11.06.2011, 18:25     i++ vs ++i (циклы) #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
OstapBender, подобные тесты нельзя брать за эталон. Один и тот же код при нескольких прогонах может выдавать кардинальную разницу во времени.
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
11.06.2011, 18:46  [ТС]     i++ vs ++i (циклы) #11
Цитата Сообщение от Maxwe11 Посмотреть сообщение
чушь, для стандартных типов нет разницы в скорости
открыли глаза как не крути mov + add
alex_x_x
11.06.2011, 19:31
  #12

Не по теме:

опять откровения пошли

voral
428 / 408 / 57
Регистрация: 16.03.2008
Сообщений: 2,023
11.06.2011, 20:03     i++ vs ++i (циклы) #13
Цитата Сообщение от silent_1991 Посмотреть сообщение
OstapBender, подобные тесты нельзя брать за эталон. Один и тот же код при нескольких прогонах может выдавать кардинальную разницу во времени.
Ни когда не задумывался. Попробовал несколько прогонов. Результаты стабильны:
пре - 3.9
пост - 4.62-4.63

Раньше писал писал постфикс. просто наверное впервые столкнулся именно с такой записью. Последнее время стараюсь приучиться использовать префикс, кроме случаев, когда действительно нужен постфикс.
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
11.09.2011, 19:00     i++ vs ++i (циклы) #14
Я тоже до сих пор использовал в циклах постфиксную форму записи, наверное стоит перейти на префиксную.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2011, 19:20     i++ vs ++i (циклы)
Еще ссылки по теме:

Циклы - C++
1)Используя перебор значений найти все числа из диапазона от n до m, которые при возведении в квадрат дают палиндром 2)В соревнованиях...

Циклы - C++
Дан номер телевизионного канала(от 1 до 5). Вывести на экран наиболее популярные программы заданного канала.

Циклы - C++
Нужна помощь с циклом.Есть определенный массив из которого необходимо вытащить данные и поставить в цикл, так же необходимо делать...

циклы - C++
2. Задание 1. Задание взять из таблицы 1 и таблицы 2 согласно варианту. 2. Разработать блок-схемы алгоритма. 3. Написать и отладить...

циклы - C++


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт CЭксперт С++
9468 / 5481 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
11.09.2011, 19:20     i++ vs ++i (циклы) #15
Разница по определению должна быть, просто на POD типах вроде int она не заметна, а ассемблерный код может быть одинаковым просто за счёт того, что умный компилятор оптимизирует этот момент. А вот с итераторами С++ разница может быть существенной. По этому, чтобы голову себе не забивать, пишу всегда префиксный оператор
C
1
2
3
int i;
for ( i = 0; i < SOMEWHAT; ++i )
    /*...*/
Yandex
Объявления
11.09.2011, 19:20     i++ vs ++i (циклы)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru