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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
Damaks
18 / 10 / 1
Регистрация: 02.09.2010
Сообщений: 235
#1

Скорость перебор вектора while/for/foreach - C++

03.05.2011, 19:00. Просмотров 2895. Ответов 8
Метки нет (Все метки)

В php foreach для массива работает в 2 раза быстрее, чем перебор того же массива циклом while или for.
Нашел на одном сайте:
for/while не лучшее решение для перебора элементов массива, т.к. на каждой итерации выполняется поиск в хештаблице. foreach для этого предпочтительней, ибо просто перебирает элементы списка.
Но это для php, а как обстоят дела с c++ stl, будет ли разница в скорости если при переборе вектора заменить цикл for или while на foreach?
В векторе, насколько мне известно, элементы хранятся в едином куске памяти, и чтобы получить следующий элемент - нужно передвинуть указатель на определенную постоянную величину... мне кажется если инкрементировать итератор, то будут лишние затраты на вычисления, т.к. не определено в какую сторону он инкрементируется или на какую величину меняется, а при foreach известно что всегда на элемент вперед.
Хотя наверно g++, в отличае от php, подобные вещи оптимизирует...?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 19:00     Скорость перебор вектора while/for/foreach
Посмотрите здесь:

Скорость перебор вектора - C++
Вектор можно перебирать двумя способами, первый - через итератор for (it=pairs.begin();it!=pairs.end();++it){ printf("%i\n",...

Скорость перебор элементов vector'a и list'a - C++
Видел на форумах пишут что поиск по несортированному вектору быстрее, чем по листу. Логично предположить что все элементы вектора находятся...

Скорость доступа к элементам вектора - C++
Всем привет! Использую вектор и интеерсует вопрос скорости выбора элементов из него. У вектора есть метод vector.at(int index),...

Foreach - C++
Здравствуйте, подскажите как написать свой цикл foreach?

Foreach цикл и потоки - C++
Список можно читать так: for(auto&pos:list) //bla-bla-bla Поток можно читать так: some_type value; while(stream>>value) ...

Отличие итератора от foreach - C++
Есть ли разница между циклами? std::vector<int> vec; vec.push_back(4); vec.push_back(5); vec.push_back(6); for...

Класс-функтор с использованием foreach и transform - C++
Добрый вечер господа, Не считает правильно сумму. Выдает феерично большое число. Не подскажите в чем проблема? #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 19:17     Скорость перебор вектора while/for/foreach #2
1. Смотря что требуется делать - то и прменяется.
2. Все оптимизируется, естественно. Надо ключи компилятора выставить...
3. Сначала надо правильную прогу писать. Только потом, ЕСЛИ НЕ УСТРАИВАЕТ, можно оптимизировать.
Damaks
18 / 10 / 1
Регистрация: 02.09.2010
Сообщений: 235
03.05.2011, 19:56  [ТС]     Скорость перебор вектора while/for/foreach #3
Яб не назвал это оптимизацией, просто хочу знать, чтобы в будущем сразу писать правильно, в случае если нужно будет поэлементно последовательно перебрать элементы массива. Цикл while получается вроде как минимален по написанию, for выглядит самым громоздким, но почему-то в привиденных примерах используют именно его, а не for_each. Хотя в php вроде как for_each работает быстрее.
В общем хотелось бы знать, что оптимальнее использовать для перебора вектора - for или foreach?
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 20:08     Скорость перебор вектора while/for/foreach #4
Цитата Сообщение от Damaks Посмотреть сообщение
В общем хотелось бы знать, что оптимальнее использовать для перебора вектора - for или foreach?
Я ж говорю - все зависит от выставления ключей компилятора и от потребностей.
В for ты можешь делать любые действия в любом порядке. В for_each нужно передавать в качестве третьего параметра функцию или функтор. Причем по требования STL эта функция (функтор) не должны изменять элемент вектора (но часто нарушают)...
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
03.05.2011, 20:20     Скорость перебор вектора while/for/foreach #5
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Причем по требования STL эта функция (функтор) не должны изменять элемент вектора (но часто нарушают)...
есть же transform
stl правильней, так как обычно оказывается и оптимальней, исключения там где его использование неудобно
хотя в новом стандарте с лямбда функциями думаю for для перебора std::vector станет архаизмом еще большим чем до этого)
TarasGolovatyj
0 / 0 / 0
Регистрация: 11.05.2014
Сообщений: 6
17.06.2014, 00:12     Скорость перебор вектора while/for/foreach #6
кому не лень напишите образець кода как ево использевать
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
17.06.2014, 00:53     Скорость перебор вектора while/for/foreach #7
Цитата Сообщение от TarasGolovatyj Посмотреть сообщение
кому не лень напишите образець кода как ево использевать
лично мне нравится фор авто рейндж.
C++
1
2
3
4
for (/*const*/ auto& element : container)
  {
  //...
  }
TarasGolovatyj
0 / 0 / 0
Регистрация: 11.05.2014
Сообщений: 6
17.06.2014, 01:57     Скорость перебор вектора while/for/foreach #8
вкратце обясни пожалуста что за авто и так дали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2014, 08:51     Скорость перебор вектора while/for/foreach
Еще ссылки по теме:

Перебор - C++
Hi.мне нужно часть кода в котором перебирает все значение пример у нас 2 банки(на много литров),и 10 л воды.Нужно сделать все возможние...

Перебор - C++
Ребят, помогите решить две задачи. Занимаюсь программированием уже 6 лет. Но тут в ступор встал. 1 задача: есть массив. из него нужно...

Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора - C++
Дано вектор В, состоящий из N действительных чисел. Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые...

Перебор списка - C++
Всем привет. Задача: Перебрать все элементы списка(линейный однонаправленный), так что бы поучаствовали все элементы, но не было повторов...

Перебор символов - C++
Есть такой хороший код для перебора символов: #include "stdio.h" #include "windows.h" #include <conio.h> int main(int argc,...


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

Или воспользуйтесь поиском по форуму:
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
17.06.2014, 08:51     Скорость перебор вектора while/for/foreach #9
http://en.cppreference.com/w/cpp/language/range-for
Yandex
Объявления
17.06.2014, 08:51     Скорость перебор вектора while/for/foreach
Ответ Создать тему
Опции темы

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