Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Алгоритмы STL vs Циклы  (Прочитано 9146 раз)
0 Пользователей и 1 Гость смотрят эту тему.
acc15
Гость
« : 27-09-2006 18:43 » 

1. Что лучше использовать?
Вообще не понимаю зачем нужны алгоритмы вроде for_each/generate/fill, они ведь в некоторых случаях только усложняют написание программы. Однако автор книги "Эффективное использование STL" уверяет в обратном, т.е. что это намного упрощает понимание и чтение программы и алгоритмы нужно использовать всегда где это возможно. Но он прав далеко не во всех случаях... К примеру такая простенькая задачка:
Есть C-массив целых чисел, каждая пара представляет собой координаты точки, нужно из этого массива сделать vector<POINT>. Без использования алгоритма STL реализация выглядит довольно просто и понятно:
Код:

int *pIntVec = pPoints;
vector<POINT> ptvec(point_count);
for(vector<POINT>::iterator iter=ptvec.begin();iter!=ptvec.end();iter++) {
   iter->x = *pIntVec++; iter->y = *pIntVec++;
}
С использованием же алгоритма STL for_each или generate приходится писать собственный объект функции, зачем нужны такие расходы во времени написания когда есть вариант который и так понятен и прост в реализации?

2. Что эффективнее использовать?
Действительно ли алгоритмы перебора работают быстрее обычных циклов когда эти самые алгоритмы содержат эти же самые циклы?
« Последнее редактирование: 27-09-2006 18:48 от acc15 » Записан
Finch
Спокойный
Администратор

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #1 : 27-09-2006 18:53 » 

Есть настольная книга Д. Кнута "Исскуство программирования" в трех томах. Говорят уже вышел четвертый том.
Приведу простой пример. В третьем томе представлены порядка 30 алгоритмов сортировки массива. От простого пузырька и до QuikSort и бинарной сортировки. Мой выбор будет зависить от ситуации. Массив на 10 элементов я применю не задумываясь или пузырек или его разновидность. Но когда скажем элементов миллион. Тогда уже буду применять или быструю сортировку или бинарную сортировку. Но эти алгоритмы например не будут работать, если нужно сортировать гигабайтные файлы на диске.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
acc15
Гость
« Ответ #2 : 27-09-2006 19:24 » 

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

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #3 : 27-09-2006 19:30 » 

Твой случай можно развернуть. Код какой то дядя написал и ты его применяеш. Или сам пишеш подобное. В первом случае минимальные телодвижения при построении программы. Но если дядин алгоритм не работает должным образом, надо искать пути по повышению эффективности.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
acc15
Гость
« Ответ #4 : 27-09-2006 19:41 » 

В случае с моим вариантом где требуется написание собственного объекта-фции это далеко не минимальные телодвижения...
Записан
Finch
Спокойный
Администратор

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #5 : 27-09-2006 19:45 » 

Цитата
Но если дядин алгоритм не работает должным образом, надо искать пути по повышению эффективности.
Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #6 : 27-09-2006 19:54 » 

Есть один извечный вопрос "Программирование это ремесло или исскуство?"
Ремесло характерно шаблонностью решений. В Исскустве также примененимы шаблоны, но также и не шаблонные решения.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #7 : 28-09-2006 06:26 » 

acc15, делай, как меньше писать коментарием Улыбаюсь
программа должна быть хорошо документированна на языке C++ Улыбаюсь
я виберу цикл или функцию которая делат то что нужно + boost::bind
Код:
void (iterator i, int **iv)
{
i->x = *(*iv++); i->y = *(*iv++);
}
Записан

Странно всё это....
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 28-09-2006 13:38 » 

Использование итерационных алгоритмов уместно в том случае, когда необходимо несколько раз писать один и тот же цикл в разных местах.  Альтернатива - вынести цикл в функцию и вызывать при необходимости её.

Я, честно говоря, предпочитаю циклы - проще отлаживаться.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines