Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
26.07.2016, 16:10     Является ли адаптер контейнера контейнером #1
75%, но некоторые вопросы вызывают недоверие. Например вопрос про стандартные контейнеры (нужно выбрать стандартные контейнеры из списка), один из вариантов std::queue, вот и думай - то ли автор вопроса плохо знает С++ и нужно выбрать std::queue, то ли автор знает С++ на достаточном уровне и std::queue выбирать не надо (т.к. это не контейнер, а адаптер). Другие вопросы тоже можно покритиковать.

 Комментарий модератора 
Вынесено из темы: http://www.cyberforum.ru/cpp-beginne...ad1785281.html
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2016, 16:10     Является ли адаптер контейнера контейнером
Посмотрите здесь:

Не работают методы в классе с контейнером map C++
Проблемы с контейнером C++
C++ Выбор контейнера
задача с контейнером C++
Ошибка в роботе с контейнером: set iterator not incrementable C++
Целью работы является создание программы для обработки набора объектов с использованием класса -контейнера C++
C++ Операция с контейнером vector
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12291 / 6978 / 784
Регистрация: 27.09.2012
Сообщений: 17,288
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 19:06     Является ли адаптер контейнера контейнером #21
hoggy, в этом вопросе я с Вами не согласен,
я предпочту различать контейнеры и адаптеры контейнеров.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoggy
5612 / 2242 / 411
Регистрация: 15.11.2014
Сообщений: 5,040
Завершенные тесты: 1
26.07.2016, 19:07     Является ли адаптер контейнера контейнером #22
Цитата Сообщение от Croessmah Посмотреть сообщение
я предпочту различать контейнеры и адаптеры контейнеров.
и по каким признакам вы их различаете?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12291 / 6978 / 784
Регистрация: 27.09.2012
Сообщений: 17,288
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 19:09     Является ли адаптер контейнера контейнером #23
hoggy, например, я могу обойти контейнер,
или знаю какую структуру данных он представляет (список, массив и т.д.).
hoggy
5612 / 2242 / 411
Регистрация: 15.11.2014
Сообщений: 5,040
Завершенные тесты: 1
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.
а что у неё под капотом вы не знаете.

и что, она от этого перестанет быть контейнером,
и станет адаптером?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12291 / 6978 / 784
Регистрация: 27.09.2012
Сообщений: 17,288
Записей в блоге: 2
Завершенные тесты: 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.
Сижу и думаю, является она контейнером или нет
Fulcrum_013
 Аватар для Fulcrum_013
509 / 613 / 68
Регистрация: 14.12.2014
Сообщений: 4,990
Завершенные тесты: 2
26.07.2016, 20:35     Является ли адаптер контейнера контейнером #26
Цитата Сообщение от hoggy Посмотреть сообщение
и что, она от этого перестанет быть контейнером
Вообще я бы в вел немного другое обозначение для термина "контейнер" - контейнером является структура хранящая указатели на объекты и имеющая средства слежения за их жизненным циклом (удаляющая их из себя при удалении объекта извне и удаляющая остатки при своем удалении (для контейнера-владельца)). А все остальное - банальные динамические массивы. Так что в STL контейнеров вообще нет.
hoggy
5612 / 2242 / 411
Регистрация: 15.11.2014
Сообщений: 5,040
Завершенные тесты: 1
26.07.2016, 20:37     Является ли адаптер контейнера контейнером #27
Цитата Сообщение от Croessmah Посмотреть сообщение
Мы обсуждаем термины, а не бизнес-логику
термин - это слово, которое является названием некоторого понятия,
имеющего однозначное определение в некоторой предметной области.

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

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

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

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

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

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

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

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

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

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

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

понимаете?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12291 / 6978 / 784
Регистрация: 27.09.2012
Сообщений: 17,288
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 20:43     Является ли адаптер контейнера контейнером #28
Цитата Сообщение от hoggy Посмотреть сообщение
где то эффективнее, если элементы очереди живут в векторе.
а где то - в листе
Другими словами, само хранение очередь делегирует контейнеру,
сама при этом - лишь обертка. У меня всё.
Я же написал уже, что не согласен.
Не нужно меня переубеждать,
это дело крайне неблагодарное
Fulcrum_013
26.07.2016, 20:45
  #29

Не по теме:

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

hoggy
5612 / 2242 / 411
Регистрация: 15.11.2014
Сообщений: 5,040
Завершенные тесты: 1
26.07.2016, 20:48     Является ли адаптер контейнера контейнером #30
Цитата Сообщение от Croessmah Посмотреть сообщение
Другими словами, само хранение очередь делегирует контейнеру,
сама при этом - лишь обертка.
она не "лишь обертка".
она - полноценный класс с собственной отличающийся
от всяких векторов бизнес-логикой.

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

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

они ведь хранят данные в строке.
делегируют ей задачи для хранения.
ct0r
C++/Haskell
 Аватар для ct0r
1559 / 578 / 39
Регистрация: 19.08.2012
Сообщений: 1,198
Завершенные тесты: 1
26.07.2016, 20:49     Является ли адаптер контейнера контейнером #31
В доке gcc - адаптер это контейнер.
В книге Джоссатиса - это контейнер.
В книге Страуструпа - это контейнер.
В стандарте - в главе, которая называется контейнеры.
Какое еще подтверждение нужно?)

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

Не по теме:

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

Fulcrum_013
 Аватар для Fulcrum_013
509 / 613 / 68
Регистрация: 14.12.2014
Сообщений: 4,990
Завершенные тесты: 2
26.07.2016, 21:02     Является ли адаптер контейнера контейнером #33

Не по теме:

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



Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
STL - это не фреймворк
А криво сделанная, опасная в использовании библиотека, не имеющая в своем составе ничего нужного.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12291 / 6978 / 784
Регистрация: 27.09.2012
Сообщений: 17,288
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 21:05     Является ли адаптер контейнера контейнером #34
Цитата Сообщение от ct0r Посмотреть сообщение
В стандарте - в главе, которая называется контейнеры.
Которая называется "Containers library",
Но при этом в отдельной главе - "Containers adaptors".
Цитата Сообщение от ct0r Посмотреть сообщение
В книге Джоссатиса - это контейнер.
Из перевода книги:
Стандартная библиотека C++ содержит не только контейнеры STL, но и контейнеры,
предназначенные для особых целей и предоставляющие простые и понятные интерфейсы.
Эти контейнеры можно разделить на так называемые контейнерные адаптеры, которые
приспосабливают стандартные контейнеры STL для особых целей, и битовые множества,
представляющие собой контейнеры, содержащие биты или булевы величины.
Существуют три стандартных контейнерных адаптера: стеки, очереди и очереди с приоритетами.
...
Реализация стека просто отображает его операции в соответствующие вызовы кон*тейнера, который внутренне используется стеком
Вообще всё это - буквоедство, но нам это нравится

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

Не по теме:

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

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

Fulcrum_013
 Аватар для Fulcrum_013
509 / 613 / 68
Регистрация: 14.12.2014
Сообщений: 4,990
Завершенные тесты: 2
26.07.2016, 21:40     Является ли адаптер контейнера контейнером #35

Не по теме:

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



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

Не по теме:

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

ct0r
C++/Haskell
 Аватар для ct0r
1559 / 578 / 39
Регистрация: 19.08.2012
Сообщений: 1,198
Завершенные тесты: 1
26.07.2016, 21:47     Является ли адаптер контейнера контейнером #36
Kastaneda, по поводу фреймворка - это к Джоссатису, он фреймворком не один раз называет, а я лишь в кавычки взял, дабы свою мысль донести)

Croessmah, из цитаты следует, что стандартные контейнеры STL - лишь часть стандартных контейнеров) Тут нужно понимать контекст, что понимается автором под STL, дабы точно интерпретировать цитату. Ибо в стандарте вообще никакого упоминания STL нету.
То, что адаптеры в отдельной главе, не делает их нестандартными или неконтейнерами) - они все равно в либе контейнеров.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12291 / 6978 / 784
Регистрация: 27.09.2012
Сообщений: 17,288
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 21:55     Является ли адаптер контейнера контейнером #37
Цитата Сообщение от Croessmah Посмотреть сообщение
Кстати, у нас на работе есть труба, метров 20 в высоту,
так вот на схеме она подписана как stack.
Сижу и думаю, является она контейнером или нет
ну так че с трубой-то, ребят?
Avazart
26.07.2016, 21:58
  #38

Не по теме:

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

Fulcrum_013
26.07.2016, 22:02
  #39

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2016, 22:05     Является ли адаптер контейнера контейнером
Еще ссылки по теме:

C++ Работа с контейнером string
C++ Работа с контейнером multimap
C++ работа с контейнером map
C++ Детектировать, является ли контейнером set или является multiset
C++ Ошибка с map контейнером

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

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

Не по теме:

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

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

Yandex
Объявления
26.07.2016, 22:05     Является ли адаптер контейнера контейнером
Ответ Создать тему
Опции темы

Текущее время: 01:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru