5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
1

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

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

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

 Комментарий модератора 
Вынесено из темы: https://www.cyberforum.ru/cpp-... 85281.html
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.07.2016, 16:10
Ответы с готовыми решениями:

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

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

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

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

62
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
26.07.2016, 19:06 21
Author24 — интернет-сервис помощи студентам
hoggy, в этом вопросе я с Вами не согласен,
я предпочту различать контейнеры и адаптеры контейнеров.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2016, 19:07 22
Цитата Сообщение от Croessmah Посмотреть сообщение
я предпочту различать контейнеры и адаптеры контейнеров.
и по каким признакам вы их различаете?
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
26.07.2016, 19:09 23
hoggy, например, я могу обойти контейнер,
или знаю какую структуру данных он представляет (список, массив и т.д.).
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2016, 19:22 24
Цитата Сообщение от 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
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
26.07.2016, 20:17 25
Цитата Сообщение от 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
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
26.07.2016, 20:35 26
Цитата Сообщение от hoggy Посмотреть сообщение
и что, она от этого перестанет быть контейнером
Вообще я бы в вел немного другое обозначение для термина "контейнер" - контейнером является структура хранящая указатели на объекты и имеющая средства слежения за их жизненным циклом (удаляющая их из себя при удалении объекта извне и удаляющая остатки при своем удалении (для контейнера-владельца)). А все остальное - банальные динамические массивы. Так что в STL контейнеров вообще нет.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2016, 20:37 27
Цитата Сообщение от Croessmah Посмотреть сообщение
Мы обсуждаем термины, а не бизнес-логику
термин - это слово, которое является названием некоторого понятия,
имеющего однозначное определение в некоторой предметной области.

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

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

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

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

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

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

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

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

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

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

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

понимаете?
1
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
26.07.2016, 20:43 28
Цитата Сообщение от hoggy Посмотреть сообщение
где то эффективнее, если элементы очереди живут в векторе.
а где то - в листе
Другими словами, само хранение очередь делегирует контейнеру,
сама при этом - лишь обертка. У меня всё.
Я же написал уже, что не согласен.
Не нужно меня переубеждать,
это дело крайне неблагодарное
0
Fulcrum_013
26.07.2016, 20:45
  #29

Не по теме:

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

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

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

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

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

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

Не по теме:

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

0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
26.07.2016, 21:02 33

Не по теме:

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



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

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

Не по теме:

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

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

0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
26.07.2016, 21:40 35

Не по теме:

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



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

Не по теме:

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

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

Croessmah, из цитаты следует, что стандартные контейнеры STL - лишь часть стандартных контейнеров) Тут нужно понимать контекст, что понимается автором под STL, дабы точно интерпретировать цитату. Ибо в стандарте вообще никакого упоминания STL нету.
То, что адаптеры в отдельной главе, не делает их нестандартными или неконтейнерами) - они все равно в либе контейнеров.
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
26.07.2016, 21:55 37
Цитата Сообщение от Croessmah Посмотреть сообщение
Кстати, у нас на работе есть труба, метров 20 в высоту,
так вот на схеме она подписана как stack.
Сижу и думаю, является она контейнером или нет
ну так че с трубой-то, ребят?
0
Avazart
26.07.2016, 21:58
  #38

Не по теме:

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

0
Fulcrum_013
26.07.2016, 22:02
  #39

Не по теме:

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

0
Avazart
26.07.2016, 22:05     Является ли адаптер контейнера контейнером
  #40

Не по теме:

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

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2016, 22:05

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

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

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

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

Проблемы с контейнером
имеются следующие типы: typedef int (*CLI_Function ) ( const std::vector &lt;const std::string&gt;...

Работа с контейнером
Первый вопрос. Вот пример перечисления элементов формы с проверкой типа элемента совместно с его...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru