![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Все, кто использует, слышал или хочет узнать больше об STL, кому нравится стиль и крутизна STL, и кому трудно "въехать", наконец, кто впервые слышит об STL (в то время как полмира его юзает втихаря
Признаюсь, я сам увидел сие лишь недавно, и полный ламак в этом. Это сообщение отредактировал(а) mr.DUDA - 1.8.2003, 16:45 -------------------- ![]() |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: 1 Всего: 1 |
-------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
А на русском
-------------------- ![]() |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: нет Всего: 16 |
Mumit's STL Newbie guide (eng)
http://www.xraylith.wisc.edu/~khan/softwar...bie.html#overvi Итераторы СТЛ http://cpp.hotmail.ru/articles/stl_01.html Роль функций библиотеки STL http://cpp.hotmail.ru/articles/stl_02.html ЗЫ. На http://cpp.hotmail.ru/article.html еще пара статей была Это сообщение отредактировал(а) DarkDS - 1.8.2003, 17:04 |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
||||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
А лучше, не пожалейте денег и сходите в хороший книжный магазин- сейчас много вышло книг по программингу с исп. STL
|
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: 1 Всего: 1 |
Не рекомендую новичкам: Г.Саттер "Решение сложных задач на c++". Какая-то охинея
-------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Я бы с удовольствием почитал... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
DENNN, я сейчас как раз собираюсь прикупить пару-тройку бук по программированию, не подскажешь что-нибудь хорошее по STL ?
plz -------------------- ![]() |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Тебе многие точно порекомендовали "Эффективное использование STL" Скота Мейерса изд. Питер - неоценимая вещь для начинающего (если у него от обилия информации голова не треснет
Есть еще "Азбука STL" П.В.Москвин. Если сам полный ноль то пригодиться, но если читать после первой книги, то понимаешь что автор далеко не гуру в C++ и STL в частности: все примеры в книги можно переисать в 2-3 раза короче. А вообще, как только увидишь на книге надпись "STL" - можешь сразу хватать нераздумывая, если мозги никогда не лень напрячь, то обязательно что-то полезное найдешь. |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: 1 Всего: 1 |
А вообще книга Г.Саттера наверное полезная
-------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Всем BIG thanks за ссылки, но вот что-то не слышно тех, кто не знает и хочет узнать "что за фича такая --- STL ?..."
Это сообщение отредактировал(а) mr.DUDA - 3.8.2003, 00:19 -------------------- ![]() |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: 1 Всего: 1 |
Чё за фича
-------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
У меня совсем другое мнение. После того, как прочел книгу, понял, что после 9 лет программирования на с++, я почти ничего о нем не знаю. Классная книга. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Я с ней работала не так много,но
1. STL - это библиотека содеражащая набор фукнций, шаблонов функций, шаблонов классов на многие случаи жизни. За частую, чем изобретать велосипед удобнее пользоваться ей. Лично мне от туда нравится вектор и строка. Вектро тот вообще намнгого удобнее MFC-шного CArray`я. ИХМО. 2. Из книг для самых маленких мне нравится учебник по C++ для росийских вузов ПАвловской. Там и основы самого С++ и краткое введение в STL. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
В общем, есть следующие соображения. Если MFC-контейнеры делались на основе STL (а так оно и есть, судя по исходникам), то быстродействие должно быть примерно одинаковым у большинства аналогичных ф-ций и методов обеих библиотек. Что я и попробовал проверить на простых примерах для списков, строк и карт:
Example 1
Странно, но MFC примерно в 2-3 раза быстрее. Example 2
Опять MFC впереди. Example 3
Отставание MFC невелико -- от 2% до 10% (сокращается при увеличении количества итераций). Не привожу примера с картами (map vs. CMap), который показал нехилые тормоза у MFC по сравнению с STL, для любого типа ключей и значений (MFC медленнее добавляет и ищет элементы на 50-300%). Неоднозначные результаты. Хм. В пользу STL говорит наличие огромного количества удобств при обработке данных, в пользу MFC -- простота записи. Жду ваших комментариев Это сообщение отредактировал(а) mr.DUDA - 8.8.2003, 15:51 -------------------- ![]() |
||||||
|
|||||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Их не будет.
|
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Кхе-кхе. Не надо забывать, что STL - это только стандарт интерфейса, а реализаций его довольно много. Ты наверное тестировал реализацию прилагаемую к VC++?
-------------------- Волны гасят ветер... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Да, я просто пытаюсь выяснить какая из технологий, доступных в VC++, наиболее подходит для реализации приложений, активно работающих со сложными типами данных. До этого я работал только с MFC, и главное, что мне в ней нравилось - целостность, завершённость библиотеки.
Далее, столкнувшись на этом форуме с людьми, для которых MFC не является признанным авторитетом (может быть, из-за стойких предубеждений к продуктам Microsoft), я попытался выяснить, чем их так безоговорочно привлекает STL. Прочитанная литература давала больше вопросов, чем ответов. Да, stl более старая (и более изученная, оттестированная, кроссплатформенная и т.п. библиотека). Да, в некотором роде, можно считать, что она предоставляет универсальный подход к хранению и обработке сложных структурированных данных. Но, начиная создавать сложные проекты, поневоле задумываешься: что для тебя важнее ? Реализовать набор функций и фич, полностью удовлетворяющих заданию, с помощью "притёртой" библиотеки (пусть даже и с потерей 5% быстродействия, но зато зная все ее ньюансы и используя на 100% все возможности, с полным контролем над всеми ее внутренними действиями), или же брать нечто навернутое, универсальное, постоянно спотыкаясь о какие-то "новые" незадействованные возможности, с постоянной оглядкой "а всё ли я использовал на все сто процентов, или можно еще круче забабахать ?", т.е. ставя во главу угла саму библиотеку, а не программу, реализованную на ее основе. Вот поэтому я создал этот топик. Чтобы выяснить, много ли таких же как я, "сомневающихся". Поэтому и кинул элементарные "бенчмарки", чтобы увидеть реакцию пиплов, использующих STL. Реакция, если честно, разочаровала. Уж очень безоговорочно и необоснованно мне дали понять: "Ты слушай как старшие делают". Вот, что я хотел этим сказать. -------------------- ![]() |
|||
|
||||
| Fantasist |
|
||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
В VC++ доступна любая реализация STL которую ты только сможешь достать. Опять же внутри самой студии. Написал ты класс использующий CArray. Потом вдруг раз, пишишь СOM сервер на ATL и хочешь использовать этот класс. Так нету в ATL СArray, там только CAtlArray. А MFC в АTL - ный проект подключается очень не элементарно. C STL, понятно, никаких проблем.
Ну, это уже вопрос знания библиотек.
Такие есть, но их не так много. Вопрос вкуса, конечно. В MFС, на мой взгляд, единственный контейнер который лучше чем STL - это строка. CString мне больше нравиться. -------------------- Волны гасят ветер... |
||||||
|
|||||||
| RAN |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
В MFC шаблоны написаны без STL. В STL нет ничего сверхсложного, эта библиотека постовляется в исходниках и главную ценность представляют принципы реализации этой библиотеки. Короче, любой желающий может посмотреть и реализовать сам то, что ему нужно и как ему нужно. Благо MFC тоже постовляет с исходником. Вот я и посмотрел реализацию CList и list. Пока разобрался только с CList (хотя сам использую только STL). Сделано в CList на мой взгляд всё очень хорошо и его можно использовать. Правда, во-первых, это не стандарт и, во-вторых, возможностей гораздо меньше.
Кстати сказать, в библиотеке Microsoft'а очень много проверок на ошибки (ASSERT'ы там разные), которые в релизе, разумеется, будут отключены, что даст ещё большее увеличение производительности. Теперь насчёт твоих тестов. MFC обогнала STL только в тех тестах, где выделяется память под новый элемент (AddTial и push_back). Объясняется это тем, что в конструктор CList передаётся размер блока (на какое кол-во элементов выделяется память при расширении списка)
По умолчанию это 10. Теперь о том, как CList работает: Внутри CList: // Implementation protected: CNode* m_pNodeHead; //это указатель на первый элемент списка CNode* m_pNodeTail; //это, соответсвенно, на последний int m_nCount; //кол-во элементов в списке CNode* m_pNodeFree; //ВНИМАНИЕ! Указатель на свободный элемент struct CPlex* m_pBlocks; //Кол-во выделенных блоков памяти int m_nBlockSize; //Тот самый размер блока При создании списка в m_pNodeFree заносится NULL, а при необходимости вставить в список новый элемент проверяется: если m_pNodeFree == NULL, то выделяется память сразу под m_nBlockSize элементов. Причём при выделении этих элементов в каждом из них запоминается указатель на следующий, в последнем элементе указатель на следующий приравнивается NULL, а в m_pNodeFree заносится указатель на первый.
Теперь как только понадобиться добачить элемент (причём не обязательно в конец или начало) он будет записан по адресу m_pNodeFree, а в m_pNodeFree будет занесён m_pNodeFree->pNext. P.S. Сейчас посмотрю list из STL и напишу свои мысли Это сообщение отредактировал(а) RAN - 9.8.2003, 11:58 |
||||
|
|||||
| Guest_DENNN |
|
|||
|
Unregistered |
Fantasist указал на причину, о которая очевидна для человека, используещего STL: реализации могут быть разные. Это во первых.
Во вторых, пусть даже ты и выбрал для своих эксперименнтов контейнер list, но ты ведь все равно проводишь тест не на быстродействие системы в целом, а на скорость добавления элементов в контейнер на твоем компьютере с твоей реализацией библиотеки. RAN указал верно, что в конструкторе CList можно указывать количество элементых, которые будут храниться, но причина глубже: я не заглядывал в исходники CList, но в контейнере std:list в твоем примере под каждый добавляемый элемент запрашивается память из кучи. Однако, даже в твоей реализации, если указать в шаблоне собственный аллокатор, который, к примеру, один раз запрашивает память и выдает контейнеру сегменты из запрошенного блока. Результат - в сотни раз сократиться время (вспомни сколько нулей в присваемом числе MAX_CNT?), затрачиваемое на выделение памяти. В твоих тестах результаты будут не просто отличаться, а изменяться на порядок! Кроме того, ты пытаешься оценивать остальные библиотеки со стороны MFC - это не объективно. Нравится использовать ее, на здоровье - в сущности здесь никому нет дела как ты пишешь программы. Но из этой полемики стоит понять, что стнадартные шаблоны можно настроить более гибко и эффективно именно под конкрентную задачу, а MFC предлагает всем одинаковй путь. |
|||
|
||||
| RAN |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Это я поторопился сказать Короче, как я и предполагал, чтоб память выделялась как в MFC надо свой allocator писать, а не использовать стандартный. Другого (стандартного) способа нет, по-моему. Всё, что я накопал, это макрос _RWSTD_CONTAINER_BUFFER_SIZE в старой STL в Builder, метод allocation_size в той же старой версии и переменная _MAX_BYTES в новой STL в Builder. В VC единица (то есть выделить на один элемент) "прошита" в коде. Короче, кто пользуется Builder'ом может делать так (НО ЭТО НЕ СТАНДАРТ):
P.S. Предупреждая возможную полемику по поводу того где лучше STL в VC или Builder'е хочу сказать, что это некорректно. Потому как STL пишется не ими. Это сообщение отредактировал(а) RAN - 9.8.2003, 17:15 |
||||
|
|||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
DENNN, ты не понял - указывается не количество элементов, которые будут храниться, а кол-во элементов в блоке памяти, выделяемом при необходимости. Т.е. память выделяется всегда на 10 (по-умолчанию) элементов, т.е при вставке 11 элемента, CList выделит память не на один, а сразу на 10 элементов, и при добавлении 12, 13, .. , 20 элемента память выделяться не будет. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Cегодня открыл книгу Л.Аммерала по STL -- так понравилось, что "проглотил" половину (правда, там начальный уровень, но очень толково), особенно понравилось то, чего нету в MFC -- deque, set, multimap, итераторы и др. Частично беру свои слова обратно (насчет сложности STL).
А можно ли как-то использовать istream/ostream_iterator совместно с MFC'шным CArchive (очень сильно нужно Это сообщение отредактировал(а) mr.DUDA - 9.8.2003, 21:02 -------------------- ![]() |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 1 Всего: 62 |
Есть руководство по STL на русском языке. Не помню, где скачал. Но если что, можно выложить. Надо?
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Если хорошее -- давай, выкладывай на топик по книгам и ресурсам !
Thanks. -------------------- ![]() |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 1 Всего: 62 |
||||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Хотел было сказать, что полное описание есть на сайте создателей библиотеке Hewlett-Packard Company (там в двух форматах), но потом удивило, что padval выложил перевод этой статьи. |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Для изучения STL это руководство практически полностью бесполезно. Его можно уже почитать потом, что уточнения деталей. -------------------- Волны гасят ветер... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Fantasist, полностью согласен. Вообще-то я очень быстро "въехал" в STL по книге Л.Аммерала (бумажный вариант).
-------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |