1 | |
Что быстрее: i++ или ++i ?11.11.2014, 11:19. Просмотров 7363. Ответов 16
Метки нет Все метки)
(
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это? Если так и если в С++ все есть обьект, то относится ли это к не итераторам в том числе?
0
|
|
11.11.2014, 11:19 | |
Что быстрее assembler или c++ Что быстрее: умножение или присваивание
|
|
236 / 194 / 21
Регистрация: 04.06.2014
Сообщений: 1,313
|
|
11.11.2014, 11:21 | 2 |
Префиксный выполняется быстрее. Не знаю почему, но это так.
1
|
![]() |
||||||
11.11.2014, 11:28 | 4 | |||||
programina, как бы истина вполне известная. Постфиксный инкремент итератора возвращает предыдущее свое значение для чего используется временная переменная. Для префиксной формы этого не требуется. Собственно данный факт относится ко всем типам в С++ поддерживаеммым инкремент или декремент. Как пример для реверсных итераторов:
3
|
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
11.11.2014, 11:28 | 5 |
programina, по всей логикет префиксный должен быть быстрее, т.к там нет копирования исходного значения, но разница в производительности не ощутимая(даже не миллионе иттераций)
2
|
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
11.11.2014, 11:38 | 7 |
programina, так же, т.е постфиксная во временную переменную сохраняет текущее значение, и оно возвращается по значению, префиксная изменяет переменную и возвращает константную ссылку
1
|
шКодер самоучка
|
||||||||||||||||
11.11.2014, 11:39 | 8 | |||||||||||||||
1
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
11.11.2014, 11:39 | 9 |
programina. Зависит от компилятора и конкретного кода. Но в подавляющем большинстве случаев операции будут выполняться одинаково быстро.
2
|
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
11.11.2014, 11:40 | 10 |
0
|
Комп_Оратор)
![]() |
|
11.11.2014, 11:43 | 11 |
Я тоже так думаю. Для итерации ведь используются простые вещи, - целые либо итераторы/указатели. Но если угораздит перегрузить инкремент-декремент для какого-то объёмистого типа, то разница может быть видна, наверное. Кроме всего, учитывая, что и при целом типе переменная может стать регистровой, а может и не стать, разница может проявиться. С другой стороны, "умный" компилятор может и не создать временную, если она не нужна (скорее мечты наверное))? Как это зависит от архитектуры и компилятора и зависит ли не скажу. Не знаю.
![]()
1
|
aLarman
|
11.11.2014, 11:45
#12
|
0
|
Почетный модератор
![]() 5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
|
|
11.11.2014, 12:04 | 14 |
Ну я удивляюсь, что никто не вспомнил про самый глубоководный камень инкремента именно пользовательского типа. Когда уже компилятор ничего не оптимизирует и бла-бла-бла.
1
|
Комп_Оратор)
![]() |
|
11.11.2014, 12:55 | 15 |
Не по теме: Это в том смысле, что если 64 разрядный регистр содержит 32 разрядное без знака, то он на половину полон? И тут согласен. :) А это не про это: ![]()
1
|
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
|
|
11.11.2014, 13:13 | 16 |
0
|
Тематические курсы и обучение профессиям онлайн Профессия Разработчик на C++ (Skillbox) Архитектор ПО (Skillbox) Профессия Тестировщик (Skillbox) |
Форумчанин
![]() ![]() 8164 / 5012 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
|
|
11.11.2014, 14:25 | 17 |
На самом деле, в теории префиксная запись быстрее т.к. возвращает ссылку, а не объект (не создаётся временная локальная копия), но всем современным компиляторам уже всё равно, они всё это дело оптимизируют, тем более для POD типов.
Для итераторов уже не всё так просто: http://www.viva64.com/ru/b/0093/ http://silviuardelean.ro/2011/... -operator/ однако чаще всего, в релизе всё равно всё приводится к префиксной записи.
1
|
11.11.2014, 14:25 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Что быстрее массив или файл Деление с остатком или маска, что быстрее? Что быстрее, операция присваивания или сравнения?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |