![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
daimon2005 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 14.5.2006 Репутация: нет Всего: нет |
К примеру говорится в книге Мейерса (Эффективное использование STL) что функция контейнера выполняетя быстрее, чем алгоритм, но пример реализации не идет, что не так
set<int> s; . . . set<int>:: iterator p=s.find(4); //функция не идет (почему ?) set<int>:: iterator p=find(s.begin(),s.end(),4); //алгоритм идет... |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
daimon2005, что значит «функция не идет»?
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
daimon2005 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 14.5.2006 Репутация: нет Всего: нет |
Void,
Error 1 error C2039: 'find' : is not a member of 'std::vector<_Ty>' c:\stl1\333333(set2)\333333(set2)\333333(set2).cpp 40 Хотя если так
Смысл? Это сообщение отредактировал(а) daimon2005 - 16.5.2006, 23:08 |
||||
|
|||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
daimon2005, метод find определен только у set, multiset, map и multimap.
С поиском в последовательных контейнерах (sequences) прекрасно справляются обобщенные алгоритмы, и смысла создавать метод поиска не было. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
DeadSoul |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Дополню:
Смысл создавать функции одноименные алгоритмам есть только в том случае, если это "выгоднее" чем использовать алгоритмы. Например, "стоимость" поиска в map-е по значению О( log(n) ), где n - число элеметов, а стоимость поиска c использование алгоритма O( n ). Разницу чувствуешь? -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
daimon2005 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 14.5.2006 Репутация: нет Всего: нет |
ОК, насчет set и vector(а) я понял а дальше цитирую дословно
Мейерса (Эффективное использование STL) Столкнувшись с выбором между алгоритмом STL и одноименной функуией контейнера, предпочтение следует отдавать функции контейнера. Она почти всегда эффективнее работает и лучше интегрируется с обычным поведением контейнеров. Или это не так? Еще... 1000000 значений функция find - 40 сравнений... алгоритм find - 500000 сравнений. |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
daimon2005, как это противоречит тому, что было сказано выше? Да, это так. Если контейнер обладает существенным знанием о своей структуре, которое не может быть выражено с помощью итератора, его собственные функции будут эффективнее.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
daimon2005 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 14.5.2006 Репутация: нет Всего: нет |
Void, нет все правильно, вопрос другой, для чего необходимо было реализовывать механизм алгоритмов, и в каких случаях лучше использовать его.
|
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
daimon2005, алгоритмы необходимы, чтобы абстрагироваться от конкретной структуры данных. Так, линейный поиск одинаков везде, если только можно определить операции сравнения, перехода к следующему элементу и конец последовательности. Вместо того, чтобы писать его отдельно для вектора, списка и т.д., определели один общий алгоритм, работающий с итераторами.
Алгоритмы могут работать с итераторами контейнеров STL, указателями, итераторами потоков ввода/вывода — всем, что обладает необходимыми операциями. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |