![]() |
Модераторы: 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. |