Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2

Является ли адаптер контейнера контейнером

26.07.2016, 16:10. Показов 4714. Ответов 62
Метки нет (Все метки)

75%, но некоторые вопросы вызывают недоверие. Например вопрос про стандартные контейнеры (нужно выбрать стандартные контейнеры из списка), один из вариантов std::queue, вот и думай - то ли автор вопроса плохо знает С++ и нужно выбрать std::queue, то ли автор знает С++ на достаточном уровне и std::queue выбирать не надо (т.к. это не контейнер, а адаптер). Другие вопросы тоже можно покритиковать.

 Комментарий модератора 
Вынесено из темы: https://www.cyberforum.ru/cpp-... 85281.html
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.07.2016, 16:10
Ответы с готовыми решениями:

Детектировать, является ли контейнером set или является multiset
здравствуйте, вот есть детектирование является ли контейнер map или multimap: template< typename... > using void_t = void; ...

Как перемещать содержимое контейнера одновременно с самим контейнером
Доброго времени суток. Есть ли в windows forms способ перемещать (обновлять) содержимое контейнера одновременно с перемещением самого...

Целью работы является создание программы для обработки набора объектов с использованием класса -контейнера
Целью работы является создание програмки для обработки набора объектов с использованием класса -контейнера динамический массив ( vector...

62
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
26.07.2016, 19:06
hoggy, в этом вопросе я с Вами не согласен,
я предпочту различать контейнеры и адаптеры контейнеров.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2016, 19:07
Цитата Сообщение от Croessmah Посмотреть сообщение
я предпочту различать контейнеры и адаптеры контейнеров.
и по каким признакам вы их различаете?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
26.07.2016, 19:09
hoggy, например, я могу обойти контейнер,
или знаю какую структуру данных он представляет (список, массив и т.д.).
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2016, 19:22
Цитата Сообщение от Croessmah Посмотреть сообщение
например, я могу обойти контейнер,
или знаю какую структуру данных он представляет (список, массив и т.д.).
то есть, вы считаете очередь "адаптером" (и не контейнером) только потому,
что она не поддерживает итераторы,
и вы не знаете какую структуру данных она представляет?

на самом деле структура данных вам известна.
std::queue представляет собой адаптер sequence containers.
об этом сказано в спецификации.

поддержка begin/end делается элементарно:

C++
1
2
3
4
using iteratir_type = decltype( std::decltype<container_type>().begin() );
...
 
iteratir_type begin() {  return m_container_type.begin(); }
для очереди это не реализовано лишь потому,
что ей это не нужно согласно её бизнес-логике.

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

или возьмите любой контейнер, который не описан в стандарте.
например, мою формочку.
я из неё выпилю begin/end.
а что у неё под капотом вы не знаете.

и что, она от этого перестанет быть контейнером,
и станет адаптером?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
26.07.2016, 20:17
Цитата Сообщение от hoggy Посмотреть сообщение
что ей это не нужно согласно её бизнес-логике
Мы обсуждаем термины, а не бизнес-логику
Как Вы её сюда приплели - не понятно.
Согласно бизнес-логике, объект типа unique_ptr - указатель же?
А по сути - это не указатель, а объект некоего класса


Two basic container types:
sequences - items in the order they were explicitly placed into the container
- vector, list, deque
- adapted to stack, queue, priority-queue
....
stacks, queue, priority_queue
adapters - wrapper around a vector or other container
Это из Library Organization and Standard Containers.

Добавлено через 22 минуты
Кстати, у нас на работе есть труба, метров 20 в высоту,
так вот на схеме она подписана как stack.
Сижу и думаю, является она контейнером или нет
2
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.07.2016, 20:35
Цитата Сообщение от hoggy Посмотреть сообщение
и что, она от этого перестанет быть контейнером
Вообще я бы в вел немного другое обозначение для термина "контейнер" - контейнером является структура хранящая указатели на объекты и имеющая средства слежения за их жизненным циклом (удаляющая их из себя при удалении объекта извне и удаляющая остатки при своем удалении (для контейнера-владельца)). А все остальное - банальные динамические массивы. Так что в STL контейнеров вообще нет.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2016, 20:37
Цитата Сообщение от Croessmah Посмотреть сообщение
Мы обсуждаем термины, а не бизнес-логику
термин - это слово, которое является названием некоторого понятия,
имеющего однозначное определение в некоторой предметной области.

например - в программировании.

дайте мне определения терминов "контейнер", и "адаптер".
и сопоставьте это все с очередью.

Цитата Сообщение от Croessmah Посмотреть сообщение
Согласно бизнес-логике, объект типа unique_ptr - указатель же?
нет.
это типа "смарт-поинтер".

задача указателя - хранить адрес объекта.

задача смарт-поинтера - определять стратегию владения ресурсами.

Цитата Сообщение от Croessmah Посмотреть сообщение
Это из Library Organization and Standard Containers.
да не нужно мне это все цитировать.
я знаком с формальной стороной дела.

вы вообще знаете почему очередь называется адаптером?
это - полноценный самостоятельный механизм
с собственным дизайном, и тп.

но при этом, очередь позволяет адаптировать её под ключ задачи,
для более эффективного решения.

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

однако это не очередь адаптирует вектор под ключ задачи.
это она сама адаптирует собственную реализацию
под ключ задачи.

там где используется очередь, вектор никому не нужен.
нужна именно очередь, которую можно кастомизировать,
подстраивая под ключ конкретной задачи.

понимаете?
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
26.07.2016, 20:43
Цитата Сообщение от hoggy Посмотреть сообщение
где то эффективнее, если элементы очереди живут в векторе.
а где то - в листе
Другими словами, само хранение очередь делегирует контейнеру,
сама при этом - лишь обертка. У меня всё.
Я же написал уже, что не согласен.
Не нужно меня переубеждать,
это дело крайне неблагодарное
0
26.07.2016, 20:45

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
там где используется очередь, вектор никому не нужен.
нужна именно очередь, которую можно кастомизировать,
подстраивая под ключ конкретной задачи.
Ну как это не нужен? К примеру в работе универсального преобразователя стека в очередь, так же известного под брендом "автомат Калашникова", вектор направления ствола имеет ключевую роль в решении конкретной задачи.:D

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2016, 20:48
Цитата Сообщение от Croessmah Посмотреть сообщение
Другими словами, само хранение очередь делегирует контейнеру,
сама при этом - лишь обертка.
она не "лишь обертка".
она - полноценный класс с собственной отличающийся
от всяких векторов бизнес-логикой.

вы написали класс, бизнес-логика которого не имеет ни малейшего отношения к строкам.
какой нибудь шаблоно-класс персон студенческих.
для решения собственной задачи у него есть мембер: std::string.
причем есть возможность указать альтернативный тип, через параметр шаблона.
хотите - std::string, а хотите - user::string

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

они ведь хранят данные в строке.
делегируют ей задачи для хранения.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
26.07.2016, 20:49
В доке gcc - адаптер это контейнер.
В книге Джоссатиса - это контейнер.
В книге Страуструпа - это контейнер.
В стандарте - в главе, которая называется контейнеры.
Какое еще подтверждение нужно?)

Другое дело, что их нельзя назвать частью именно “фреймворка“ STL.
0
26.07.2016, 20:55  [ТС]

Не по теме:

Цитата Сообщение от ct0r Посмотреть сообщение
“фреймворка“ STL.
STL - это не фреймворк

0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.07.2016, 21:02

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Не нужно меня переубеждать,
это дело крайне неблагодарное
Так же как и меня. Пока что я ржу нимагу с коммитета. То у них итераторы unsafe то смарт-поинтеры unsafe (реально unsafe, бо как после delete *this; у того на кого указывают креш гарантирован), то тонны нечитабельного гавнокода в которых есть все кроме самого необходимого. При этом то что реально необходимо в повседневной работе - а именно контейнеры (списки на основе массива указателей) со слежением за жизненным циклом, мультисписки обработки, деревья с иерархией владелец-предок и мультидеревья умещаются в 1000 строк кода. Лучше бы блин свойства и RTTI стандартизировали (имеется в виду не проcто typeid и typename а список свойств), а то блин для того чтобы подгрузку полиморфную на автомате сделать приходится свой парсер-генератор таблиц RTTI городить. А все от того что никак в комитете не поймут что для того чтобы указатели были безопасными, умными должны быть не сами указатели а объекты которые их используют,



Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
STL - это не фреймворк
А криво сделанная, опасная в использовании библиотека, не имеющая в своем составе ничего нужного.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
26.07.2016, 21:05
Цитата Сообщение от ct0r Посмотреть сообщение
В стандарте - в главе, которая называется контейнеры.
Которая называется "Containers library",
Но при этом в отдельной главе - "Containers adaptors".
Цитата Сообщение от ct0r Посмотреть сообщение
В книге Джоссатиса - это контейнер.
Из перевода книги:
Стандартная библиотека C++ содержит не только контейнеры STL, но и контейнеры,
предназначенные для особых целей и предоставляющие простые и понятные интерфейсы.
Эти контейнеры можно разделить на так называемые контейнерные адаптеры, которые
приспосабливают стандартные контейнеры STL для особых целей, и битовые множества,
представляющие собой контейнеры, содержащие биты или булевы величины.
Существуют три стандартных контейнерных адаптера: стеки, очереди и очереди с приоритетами.
...
Реализация стека просто отображает его операции в соответствующие вызовы кон*тейнера, который внутренне используется стеком
Вообще всё это - буквоедство, но нам это нравится

Добавлено через 1 минуту

Не по теме:

Fulcrum_013, да, там одни дауны, поэтому Вас туда не берут, Вы же один умный и знающий.:)

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Так же как и меня.
Вас, вроде бы, и не переубеждают здесь.

0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.07.2016, 21:40

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Добавлено через 1 минуту
Не по теме:
Fulcrum_013, да, там одни дауны, поэтому Вас туда не берут, Вы же один умный и знающий.
А я туда и не прошусь. Да и если и буду когда нибудь заниматься стандартизацией чего либо, то этот язык будет называться по другому, например ++С. А то что то тесновато в рамках C++ стало. Не хватает средств для одновременного описания мультисписка и данных его привязки в содержимом классе. Да и совместить просто мультисписок (объект может находится одновременно в каждом из списков обработки) с уникальным мультисписком (объект в каждый момент времени может находится только в одном из списков обработки) в одном котейнере просто шаблоном не удается. Потому как автогенерация нужна сразу в нескольких классах, мало того в скопе класса а не инстанционированного шаблона, а то 2 раза одну и ту же инфу писать приходится только разные ее части и смотреть чтобы они совпадали.



Добавлено через 22 минуты

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Вас, вроде бы, и не переубеждают здесь.
Ну да, разве что некоторые почти инкогнито кошаки пытаются минусами переубедить что комитет самый типа вумный. Только вот что то ни в одной серьезной библиотеке не видел использования STL ни разу. Зато списки со слежением за жизненным циклом, списки обработки, древовидные иерархии, двунаправленные указатели в том или ином объеме реализации - так это везде. Так же как практически во всех лидирующих реализациях компилятора нативные свойства и делегаты, и так или иначе в урезанном виде (только для своей библиотеки идущей в комплекте) RTTI. что поделаешь - компонентную модель по другому не реализуешь. Либо RTTI и реестр типов генерит компилятор, либо писать эти таблички ручками. По другому никак. Вот и возникает вопрос - почему коммитет мается со всякой дурью, а тем более с бесперспективной моделью обеспечения безопасности указателей, давно никому не интересными динамическими структурами данных заточенными под хранение фундаментальных типов, вместо стандартизации того что действительно необходимо на современном этапе. Опять же - не утекти память это не задача для толкового первокурсника. А вот гораздо более чаще встречающаяся на практике задача - обнулить все ссылки на удаленный объект и исключить их из всех списков в которых он содержится почему то вообще без внимания осталась. Ну это уж если они еще и хотят стандартный фреймверк на все случаи жизни. т.е. что получается - носится коммитет с библиотекой по концепции 70-ых а из за этого простейшие и нужнейшие языковые средства которые всех вендоров так или иначе есть уже 20 лет стандартизировать не может.

0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
26.07.2016, 21:47
Kastaneda, по поводу фреймворка - это к Джоссатису, он фреймворком не один раз называет, а я лишь в кавычки взял, дабы свою мысль донести)

Croessmah, из цитаты следует, что стандартные контейнеры STL - лишь часть стандартных контейнеров) Тут нужно понимать контекст, что понимается автором под STL, дабы точно интерпретировать цитату. Ибо в стандарте вообще никакого упоминания STL нету.
То, что адаптеры в отдельной главе, не делает их нестандартными или неконтейнерами) - они все равно в либе контейнеров.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
26.07.2016, 21:55
Цитата Сообщение от Croessmah Посмотреть сообщение
Кстати, у нас на работе есть труба, метров 20 в высоту,
так вот на схеме она подписана как stack.
Сижу и думаю, является она контейнером или нет
ну так че с трубой-то, ребят?
0
26.07.2016, 21:58

Не по теме:

Fulcrum_013, Ты уже придумал как назовешь свою секту? :D
Лучше иди займись придумыванием, хорош серить сюда..

0
26.07.2016, 22:02

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Fulcrum_013, Ты уже придумал как назовешь свою секту?
Лучше иди займись придумывание, хорош серить сюда..
Некогда мне сектами заниматься. Сейчас вот изобретаю как собрать floating point литералы со всеми их суффиксами и т.п. прямо в автомате токенизера, а не на выходе по частям слепливать, и при этом по дороге подсчитать их значение.

0
26.07.2016, 22:05

Не по теме:

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Некогда мне сектами заниматься.
А вот зря, они видимо тобой занялись :D

Цитата Сообщение от Croessmah Посмотреть сообщение
ну так че с трубой-то, ребят?
Применить алгоритм сплитирования распиливания и сдачи на металлолом.

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

Из каждого элемента контейнера map вычесть среднее арифметическое контейнера
Контейнер map, тип элементов Int 3.Из каждого элемента вычесть среднее арифметическое контейнера

Содержимое внутреннего контейнера увеличивает размер внешнего контейнера
есть во внутреннем контейнере фотка, которая достаточно велика, ее стиль не представляется возможности поменять, так как это изображение...

Ajax. Задача заменить содержимое контейнера на содержимое того же контейнера из ответа сервера
Привет всем! Есть обращение Ajax $('#price_button').click(function () { $.ajax({ type: 'GET', url: '', success:...

Wi-fi адаптер. Ноутбук перестал находить адаптер.
Ноутбук перестал находить адаптер вай фай, также не работает блитуз.. я даже не могу понять включен ли он вообще.. иногда появлется значок...

задача с контейнером
помогите с решение задачи с контейнером Создать контейнер &quot;мультимножество&quot; с элементами типа int. Контейнер пустой. Заполнить его...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru