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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
ZaxarPal
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 83
#1

Целесообразность использования цикла. - C++

18.10.2011, 01:43. Просмотров 1272. Ответов 22
Метки нет (Все метки)

Этот момент в универе нам не объясняли. Хочу сразу сказать, я знаю зачем, как и когда используются циклы. Собственно возник не большой спор. Какое преимущество будет иметь код
C++
1
2
for (int i = 0; i < 10; ++i)
    <действие>
перед просто десятью строками типа
C++
1
2
3
4
<действие>
<действие>
<действие>
<действие>
?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2011, 01:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Целесообразность использования цикла. (C++):

Отсортированные по порядку случайно выбранные номера (целесообразность использования random_shuffle в задании) - C++
Задание звучит так: Карточка лотереи имеет нумерованные поля, из которых случайным образом выбирается определенное количество ...

Шейкерная сортировка без использования while цикла - C++
Ребят, сделал шейкерную сортировку через два вложенных цикла - не работает. Не могу понять в чем проблема, подскажите пожалуйста. ...

Ознакомиться с операторами цикла их видами и правилами их использования - C++
Ознакомиться с операторами цикла их видами и правилами их использования. y(x)=(cos(d+x)+cx)/(ax+b), x=-1(0.2)1

Опишите сходство и различие использования операторов цикла for, while - C++
0пишите сходство и различие использования операторов цикла for, while и do ... while. Приведите примеры.

Как обойти массив без использования цикла - C++
С помощью рекурсии

Вывод массива без использования цикла на C(pure)) - C++
Какие есть мысли и/или готовые решения по сабжу ?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.10.2011, 12:17 #16
Цитата Сообщение от diagon Посмотреть сообщение
речь шла о элементарном цикле
Я вот не вижу ничего элементарного в записи <действие> .)
Выполняется 10 итераций с выполнением неизвестного объёма кода. Так что тут вообще говорить не о чем, только пространные предположения.)

Допустим, речь о инициализации массива из 10 элементов. цикл удобнее, но последовательное присваивание эффективнее. В относительных величинах - намного эффективнее. В абсолютных - несколько тактов процессора.

Добавлено через 2 минуты
Цитата Сообщение от diagon Посмотреть сообщение
Не могу представить другой задачи, в которой цикл можно заменить на последовательность действий.
Любой цикл с известным количеством итераций (известными до запуска цикла) можно развернуть.
1
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.10.2011, 12:34 #17
Цитата Сообщение от Deviaphan Посмотреть сообщение
Допустим, речь о инициализации массива из 10 элементов. цикл удобнее
Здесь удобнее плоский стиль(видел такой термин где-то ) будет =)
C++
1
std::fill(arr, arr + 3, 0);

Цитата Сообщение от Deviaphan Посмотреть сообщение
но последовательное присваивание эффективнее
Чем? Вы же сами сказали
Цитата Сообщение от Deviaphan Посмотреть сообщение
Любой цикл с известным количеством итераций (известными до запуска цикла) можно развернуть.
Компилятор должен развернуть такой цикл, и в бинарном коде особой разницы быть не должно.
1
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.10.2011, 12:39 #18
Цитата Сообщение от diagon Посмотреть сообщение
Компилятор должен развернуть такой цикл, и в бинарном коде особой разницы быть не должно.
Я как-то упустил из виду это утверждение.) Тогда да, никакой. Но только нужен хороший оптимизирующий компилятор.)

Добавлено через 1 минуту
С другой стороны, пока не залезешь в ассемблерный листинг не поймёшь, развернул он цикл или нет.
С ещё более другой стороны, если он цикл не развернул, то, вероятно, такой потребности не возникло.)
1
Bers
Заблокирован
18.10.2011, 12:46 #19
Цитата Сообщение от Deviaphan Посмотреть сообщение
Допустим, речь о инициализации массива из 10 элементов. цикл удобнее, но последовательное присваивание эффективнее. В относительных величинах - намного эффективнее. В абсолютных - несколько тактов процессора.
Речь не о работе скомпилированного кода. Речь об оптимизации исходного кода самим человеком.

Если от "разворачивания" цикла будит ощутимый профит, неужели компилятор сам не догадается это сделать?


Одно дело оптимизировать принцип хранения данных (дата-ориентированное программирование)
Другое дело оптимизировать алгоритмы в узких местах.

И третье - пытаться ручками оптимизировать исходный код.

Можно сделать так:

int a=10; int b=a; int c=b; //типа в три действия

можно сделать так:

int a=10; int c=a; //типа в два действия

Но будит наивным полагать, что исходник с тремя действиями будит выполняться дольше. Скорее всего компилятор выбросит промежуточную переменную.

А может и все три переменные выбросит, если они так больше нигде и не будут использованы.
1
ZaxarPal
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 83
18.10.2011, 13:38  [ТС] #20
Вопрос был больше таки в том, как будет работать скомпилированная программа. Большинство непонятных мне моментов Deviaphan разъяснил. Спасибо.
0
rescr1pt
33 / 34 / 1
Регистрация: 03.10.2011
Сообщений: 61
18.10.2011, 13:42 #21
Цитата Сообщение от ZaxarPal Посмотреть сообщение
Вопрос был больше таки в том, как будет работать скомпилированная программа. .

Не по теме:

assembler тебе в помочь

0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.10.2011, 10:22 #22
Цитата Сообщение от diagon Посмотреть сообщение
Здесь удобнее плоский стиль
Это тоже цикл
0
Bers
19.10.2011, 14:33     Целесообразность использования цикла.
  #23

Не по теме:

Цитата Сообщение от rescr1pt Посмотреть сообщение
assembler тебе в помочь
Забыли добавить: Ваш Капитан Очивидность

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2011, 14:33
Привет! Вот еще темы с ответами:

Составить циклические программы без использования операторов цикла - C++
Составить алгоритм программы для вычисления суммы без использования массивов и операторов цикла. Написать программу для вычисления суммы. ...

Возможно ли без использования цикла получить символ с конца нулевого аргумента main()? - C++
Использую имя файла как аргумент для предварительной настройки программы. Хочу без помощи поиска в цикле получить пред-пред-пред последний...

Целесообразность перегрузки оператора - C++
Изначально имелся такой вот метод (пусть будет методом класса &quot;A&quot;): //класс &quot;A&quot;, константная версия метода const Order &amp;operator...

Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" - C++
Ну, Вам правильно ответили, но второе условие и так будет исполняться. Т.е. если текст не пустой, то будет срабатывать любое из значений, а...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.10.2011, 14:33
Ответ Создать тему
Опции темы

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