С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712

Начала STL и контейнеры C++

02.09.2016, 23:38. Показов 4278. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Многие улучшения, сделанные из C в C++ вызывают сомнения и вопросы...
Именно поэтому, наверное, при любви к C++ вузовских пЫдагогов, в обучении - число реальных публичных, широко известных открытых проектов на C++ за прошедшие 20 лет так и не выросло лавинно, и в процентном отношении так и не превышает долю проектов на классическом C. И именно поэтому, наверное, развитие идеологии (если и не впрямую синтаксиса) языка C пошло 6-7 лет назад в новое ответвление - язык Go.

Но всё это лирика...
А есть в C++ (современном, после начала 2000-х) один раздел, которого так не хватало в классическом C для построения высокоуровневых структур данных. Это STL (Standard Template Library). Идеи реализации которой заимствованы из языка Ada...
И, если кто помнит, автор C++ Б.Страуструп сам постоянно пишет, что программировать а C++ можно в совершенно разных стилях ... например, следуя во многом идеологии C, используя там где это удобно новые возможности C++ ... не увлекаясь чрезмерно классами и объектами ... ещё меньше наследованием и полиморфизмом ... и совсем уж как огня опасаясь множественного наследования

Другими словами это называется: сосредотачиваться на алгоритмике решения поставленной задачи (инженерная цель), а не на эстетических игрищах с "кодастайл" и другими формальными бирюльками...
И в этом сильную помощь оказывает активное использование STL. Но для этого STL нужно уметь использовать разнообразно, гибко, а не тупо повторяя заклинания из учебников. Лучше на примерах, которые можно прямо взять, скопировать и использовать в своём коде. Да ещё и с учётом тех новшеств, которые даёт стандарт C++11 (2011 года), когда использование STL + C++11 даёт очень интересную ... интерференцию.

Вот такому использованию STL посвящен написанный по случаю такой вот текст: Начала STL и контейнеры C++.
(я даю только косвенную ссылку на текст и примеры, потому что а). их местоположение изменяется и б). они обновляются и расширяются ...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.09.2016, 23:38
Ответы с готовыми решениями:

Начала STL и контейнеры C++
Вот такой вот простенький текст предлагается "Начала STL и контейнеры C++". Скачать свободно можете здесь - и короткие главки (их 21 на...

Контейнеры STL
Кто знает где найти информацию по поводу стандартных контейнеров STL? Интересует не то, как их применять, а основы реализации. Может быть...

Контейнеры Stl, экзамен
Очень прошу помочь на экзамене! Написать программу: в контейнере имеется некоторый набор чисел, скопировать элементы, которые встречаются...

26
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,989
Записей в блоге: 32
03.09.2016, 00:01
Простите, а вот если, к примеру, у меня древовидная иерархическая структура объектов с паритетными связями - как мне реализовать ее с помощью STL-контейнеров?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.09.2016, 00:05
Цитата Сообщение от _Ivana Посмотреть сообщение
как мне реализовать ее с помощью STL-контейнеров?
родительский объект содержит список деток в контейнере.
ваш К.О.
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
03.09.2016, 00:09  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
Простите, а вот если, к примеру, у меня древовидная иерархическая структура объектов с паритетными связями - как мне реализовать ее с помощью STL-контейнеров?
Да элементарно.
Берите и почитайте.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,989
Записей в блоге: 32
03.09.2016, 00:16
hoggy, а если у меня умные объекты, которые сами знают в каких контейнерах они находятся и удаляются из них за О(1)?
Olej, STL вроде не подходит для хранения умных объектов, только примитивных типов для хеллоуворлдов...
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
03.09.2016, 00:25  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
STL вроде не подходит для хранения умных объектов, только примитивных типов для хеллоуворлдов...
У того, кто понимает что и когда происходит - всё подходит.
А для того, кто начитавшись формалистичных фокусов на C++, игрищ - рассчитывает что всё само будет происходить и не требуется понимания, так там и самые умные объекты закончатся утечкой памяти и крахом приложения.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.09.2016, 01:00
Цитата Сообщение от _Ivana Посмотреть сообщение
а если у меня умные объекты, которые сами знают в каких контейнерах они находятся и удаляются из них за О(1)?
да мне как бы пофигу чего там у вас.

1.
грамотно формулируйте свой запрос.
что бы потом не возникало всяких "если".

2.
согласно теории ошибок, командир указывает солдатам, а не наоборот.
в годной архитектуре,
объекты не должны делать предположений о своих полках контейнерах.
они должны тупо подчиняццо своему руководителю агрегату.
и не делать никаких предположений о форме своего существования,
которую этот агрегат для них определил.

нарушение этого положения ведет к говнокоду нарушениям инкапсуляции.


сейчас у вас есть шанс продемонстрировать профит своих "умных объектов".
потому что пока что не понятно, что это такое, и зачем оно вперлось.

и не забывайтесь: вы находитесь в ветке с++.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.09.2016, 01:01
Цитата Сообщение от Olej Посмотреть сообщение
Да элементарно.
Берите и почитайте.
А если при этом объекты хранимые в дереве любят самоудаляться оповещая контейнер и соседей? При этом политика роста размера std::vector очень не оптимальна для деревьев и списков обратных указаьелей для оповещения о самоудалении.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.09.2016, 01:04
Цитата Сообщение от _Ivana Посмотреть сообщение
STL вроде не подходит для хранения умных объектов, только примитивных типов для хеллоуворлдов...
не очевидно, что вы подразумеваете под "умными объектами".

STL подходит для хранения любых типов: и фундаментальных, и пользовательских.

если пользовательсткий тип данных не являет собой простую модель уровня "хелло ворлд",
значит это - говнокод.

и да, это ортогонально STL.
егошним контейнерам начхать на сложность абстрации типов.

оно выставляет собственные требования.
и если тип им удовлетворяет - жрет их за милую душу.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.09.2016, 01:08
Цитата Сообщение от Olej Посмотреть сообщение
Это значит, что у них не очень умный создатель
Это значит что с ними работают по принципу : "создал экземпляр,настроил добавил, в модель и забыл".
А STL предназначена для обработки последовательностей фундаментальных типов путем их полного перебора. Такой подход остался в 60-ых и хеллоувердах.

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
Сегошним контейнерам начхать на сложность абстрации типов
Они не умеют даже обработать самоудаление/внешнее удаление экземпляра объекта.
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
03.09.2016, 01:09  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А если при этом объекты хранимые в дереве любят самоудаляться оповещая контейнер и соседей? При этом политика роста размера std::vector очень не оптимальна для деревьев и списков обратных указаьелей для оповещения о самоудалении.
А если вас так беспокоит "неоптимальность", то можете: а). использовать вручную структуры list_head кольцевых циклических списков, на которых сегодня построены все динамические структуры ядра Linux, или б). вручную строить свои собственные реализации.

Только трудоёмкость (и срок выполнения) проекта у вас в этом случае будет на порядок длиннее, а ошибок и рекламаций на проект (особенно в случае б).) будет на 2 порядка больше.
А меня вот эти соображения беспокоят.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.09.2016, 01:10
Цитата Сообщение от hoggy Посмотреть сообщение
значит это - говнокод
Говнокод - это то что внутри STL, Оно абсолютно не читабельно. И пользование STL особенно манипуляций с контейнерами превращает программу в плохо воспринимаемый говнокод.
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
03.09.2016, 01:13  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А STL предназначена для обработки последовательностей фундаментальных типов путем их полного перебора.
Чувствую железную поступь пЫдагога

А кто вам рассказал такую глупость про последовательный перебор?
А как же map<>, multimap<>, set<> и т.д.

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Оно абсолютно не читабельно. И
Читабельность или нет - зависит исключительно от уровня грамотности.
Это во всех областях ... и STL здесь не исключение.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.09.2016, 01:16
Цитата Сообщение от Olej Посмотреть сообщение
вручную строить свои собственные реализации
Цитата Сообщение от Olej Посмотреть сообщение
Только трудоёмкость (и срок выполнения) проекта у вас в этом случае будет на порядок длиннее, а ошибок и рекламаций на проект (особенно в случае б).) будет на 2 порядка больше.
А меня вот эти соображения беспокоят.
Трудоемкость при реализации своих контейнеров взаимодействующих с хранимым объектом на порядок меньше. Так как сокращает код в разы и позволяет создав абстракцию один раз избавиться от инфраструктурного кода в остальных местах. Меньше инфраструктурных лисапедов при реализаици взаимосвязей между объектами (за счет того что взаимосвязь вынесена в абстрактные взаимодействующие объект и контейнер)меньше - кода и ошибок.

Добавлено через 1 минуту
Цитата Сообщение от Olej Посмотреть сообщение
А кто вам рассказал такую глупость про последовательный перебор?
Эпоха событийного управления которая наступила еще в 70-ых.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.09.2016, 01:21
Цитата Сообщение от Olej Посмотреть сообщение
Читабельность или нет - зависит исключительно от уровня грамотности.
Это во всех областях ... и STL здесь не исключение.
Читабельность зависит исключительно от уровня декомпозиции. При использований контейнеров STL при каждом поиске/вставке/удалении(особенно удалении по значению) . элемента указывать всю поднаготную алгоритма поиска/замены/удаления и т.п вместо четких выделенных для этого команд.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
03.09.2016, 01:31
Цитата Сообщение от Olej Посмотреть сообщение
Другими словами это называется: сосредотачиваться на алгоритмике решения поставленной задачи (инженерная цель), а не на эстетических игрищах с "кодастайл" и другими формальными бирюльками...
Например какими бирюльками?

Olej, придираться к чему-либо я не буду, учитывая целевую аудиторию.
Однако отсутствие какой-либо информации по array, unordered_set, unordered_map делает далеко неполной инфу по контейнерам.
И еще утверждение, что map и multimap - это хэш-таблицы, режет глаза, так как довольно приличная дезинформация.

PS
Кого не интересует STL, что здесь делают? Я, например, во всякие билдерные темы и в этом роде не захожу, чтобы написать, что это отстой, ибо смысл? Пусть там народ резвится в своей песочнице
А тут такое чувство, что у кого-то постоянно пригорает от слова STL. Успокоительные надо пить тогда. STL, STL, STL, ...
9
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
03.09.2016, 01:36  [ТС]
Цитата Сообщение от ct0r Посмотреть сообщение
Однако отсутствие какой-либо информации по array, unordered_set, unordered_map делает далеко неполной инфу по контейнерам.
В заглавии сказано: "Начала...".
И цели не было переписывать "полную инфу" - для этого есть документация.
Да и детальная и полная информация раздует объём до нечитаемых размеров.
Целью было - примеры использования.

Цитата Сообщение от ct0r Посмотреть сообщение
И еще утверждение, что map и multimap - это хэш-таблицы, режет глаза, так как довольно приличная дезинформация.
У вас есть аргументы против?
У вас есть информация вместо дезинформации? - выкладывайте её сюда немедленно!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.09.2016, 01:41
Цитата Сообщение от Olej Посмотреть сообщение
У вас есть аргументы против?
да есть.

стандарт говорит:
Maps are associative containers
и это все, что он говорит.
он не говорит,
что это обязательно должны быть хеш-таблицы

это уже означает, что вы - дезинформируете население.

тем паче, что в большинстве реализаций карта реализована,
как красно-черное дерево.
о чем писано во многочисленных учебниках и справочниках.
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,989
Записей в блоге: 32
03.09.2016, 01:44
О, выясняется, что гений, альтруистично поделившийся своим спамом, сам не знает STL? И требования к объектам, помещающимся в различные контейнеры?
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
03.09.2016, 01:46  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
да есть.
стандарт говорит:
Maps are associative containers
и это все, что он говорит.
он не говорит,
что это обязательно должны быть хеш-таблицами
Если ссылаетесь на стандарт - нужно давать ссылку (какой, где).
А я ссылался на реализацию UNIX/Linux, публикации на эту тему (поверьте, не сам придумал), и результаты использования и тестов.

{deleted}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2016, 01:46
Помогаю со студенческими работами здесь

Ассоциативные контейнеры STL
Везде сказано: set - упорядоченное множество уникальных элементов. (есть куча примеров и уроков) multiset - то же что и set, но...

STL, контейнеры классы
Ребят, помогите кто чем сможет, а то уже мозг не варит за целый день, в общем, вот задание: Первый контейнер - Вектор, Второй - Стэк, Тип...

Ассоциативные контейнеры библиотеки STL
Помогите,задание на фото

Контейнеры STL и виды деревьев
подскажите, или покажите где есть эта информация например я знаю, что контейнеры map и set реализованы через красно-черное дерево через...

STL. Итераторы и последовательные контейнеры
Немогу решить эти задачки: 1 Написать экземпляр класса queue на основе элементов типа string. 2.Написаты программу, которая использует...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 07.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru