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

Зачем нужны адапторы контейнеров? - C++

Восстановить пароль Регистрация
 
AnreyKazakov
Заблокирован
26.09.2012, 11:17     Зачем нужны адапторы контейнеров? #1
Объясните, пожалуйста, зачем нужны адаптеры контейнеров. Не понимаю смысл их существования, у них и функции какие-то кривые по сравнению с функциями контейнеров... И вообще непонятно, зачем, допустим, deque запихивать в stack, если она в первоначальном варианте обрабатывается намного лучше и легче?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.09.2012, 11:24     Зачем нужны адапторы контейнеров? #2
AnreyKazakov, stack это stack. Он работает по несколько другому принципу, нежели дек. Адапторы контейнеров вполне удобная вещь.
AnreyKazakov
Заблокирован
26.09.2012, 11:29  [ТС]     Зачем нужны адапторы контейнеров? #3
Цитата Сообщение от ForEveR Посмотреть сообщение
stack это stack. Он работает по несколько другому принципу, нежели дек. Адапторы контейнеров вполне удобная вещь.
Спасибо ForEveR, за такой Конкретыный ответ
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
26.09.2012, 11:36     Зачем нужны адапторы контейнеров? #4
Stack != Deque
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.09.2012, 11:38     Зачем нужны адапторы контейнеров? #5
AnreyKazakov, Просто вы задаетет странные вопросы. Как реализован стек - дело 10-е. Это абсолютно отдельная структура данных никак не относящаяся к деку.
AnreyKazakov
Заблокирован
26.09.2012, 11:44  [ТС]     Зачем нужны адапторы контейнеров? #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Просто вы задаетет странные вопросы.
Ну , а чего же тут странного, вы можете задачку какую-ниб привести, где просто необходимо использовать стековую структуру, или структуру очереди, мне кажется у контейнеров функционал куда шире, и если хочешь его можно использовать и как стек и как очередь... deque, например, просто не использовать некоторые функции вот вам и stack получился....

Добавлено через 1 минуту
Тем более стек как раз на базе очереди двухсторонней и реализован (по умолчанию)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.09.2012, 11:47     Зачем нужны адапторы контейнеров? #7
AnreyKazakov, Стек - это абсолютно отдельная структура данных (я не про С++, а вообще). Если задача требует (по логике) использовать стек - используют стек, а не дек. Это же логично, разве нет? Плюс к тому, адапторы не имеют итераторов, они имеют ограниченный доступ к элементам и ограниченное кол-во функций. Собственно, несколько не логично пытаться забрать из стека 3-й элемент, не кажется?
AnreyKazakov
Заблокирован
26.09.2012, 11:55  [ТС]     Зачем нужны адапторы контейнеров? #8
Цитата Сообщение от ForEveR Посмотреть сообщение
не логично пытаться забрать из стека 3-й элемент
Во, теперь начал понимать, наверное там и указателей нет, хотя если даже есть они в такой структуре не очень то нужны....
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.09.2012, 11:58     Зачем нужны адапторы контейнеров? #9
AnreyKazakov,
Например задача разбора мат/выражения - подсчета открывающих/закрывающих скобок. Используется стэк.
Пример очереди - какое-нибудь клиент-серверное игровое приложение, которое формирует сессионные игры в порядке живой очереди подключившихся.

С вашей логикой - вы выкинете все контейнеры, кроме какого-то одного. Зачем нам vector и queue, если есть deque?
AnreyKazakov
Заблокирован
26.09.2012, 12:14  [ТС]     Зачем нужны адапторы контейнеров? #10
Цитата Сообщение от I.M. Посмотреть сообщение
С вашей логикой - вы выкинете все контейнеры, кроме какого-то одного. Зачем нам vector и queue, если есть deque?
Ага
Кстате, я одну задачу в таком роде так и не решил ....
Цитата Сообщение от I.M. Посмотреть сообщение
подсчета открывающих/закрывающих скобок
Надо было найти количество возможных вариантов расположения скобок в уравнении, если 3 пары, то варианты возм: ()()() , (())() , ()(()), (()()) , ((())) . Ну, я думаю, сейчас то уж точно решу, с адапторами.... =)

Добавлено через 1 минуту
А там количество пар по моему 7 равно было, так и не придумав вариант написания программы я перебрал вручную, минут за десять, но не угадал с ответом =((
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
16.10.2012, 16:19     Зачем нужны адапторы контейнеров? #11
Вот! Тот же вопрос зачем он нужен не понимаю? Суй везде vector и list да и всё? нет?
Надо тогда какую нибудь статистику провести чтоле, по производительности. Или про реализацию его почитать?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
16.10.2012, 16:26     Зачем нужны адапторы контейнеров? #12
Цитата Сообщение от maxon887 Посмотреть сообщение
Суй везде vector и list да и всё?
Нарисуйте себе на листе бумаги дек, вектор, лист и стек. Разница будет видна.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.10.2012, 22:08     Зачем нужны адапторы контейнеров? #13
Цитата Сообщение от maxon887 Посмотреть сообщение
зачем он нужен не понимаю? Суй везде vector и list да и всё? нет?
Когда программа пишется на высоком уровне, тем более с использованием ООП, необходимо понимать, что программист работает с программными объектами на некотором уровне абстракции. Если по логике задачи нужна именно стековая структура - логичнее, нагляднее, и, главное, с сохранением уровня абстракции нужно выбрать именно стек. Можно и вектором не пользоваться (абстракция, представляющая чёрный ящик-динамически расширяющуюся последовательность однотипных элементов), а использовать динамические или вообще здоровенные статические массивы. Но если задача по логике требует контейнер, динамически расширяющийся во время исполнения программы, то стоит использовать вектор. Ведь это тоже абстракция - динамическое расширение. На самом деле ничего не расширяется, а просто когда места не хватило - создаётся новая, большая по размеру область памяти, и туда копируются все старые данные, а старая область памяти удаляется. Но на некотором уровне абстракции мы видим именно динамическое расширение.
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
17.10.2012, 13:29     Зачем нужны адапторы контейнеров? #14
"Абстракция" - не нравиться мне это слово.Мол не твоё это дело как оно там работает(((((
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
17.10.2012, 13:30     Зачем нужны адапторы контейнеров? #15
Цитата Сообщение от maxon887 Посмотреть сообщение
"Абстракция" - не нравиться мне это слово.Мол не твоё это дело как оно там работает(((((
откройте фаил и посмотрите =)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
17.10.2012, 15:14     Зачем нужны адапторы контейнеров? #16
Цитата Сообщение от maxon887 Посмотреть сообщение
Мол не твоё это дело как оно там работает(((((
Так и есть, программиста не волнует, что внутри контейнера, главное, что он работает так, как задокументировано.
Другими словами абстракция позволяет программисту абстрагироваться от внутреннего устройства контейнера (или чего-то дргугого).
Например потоки в/в тоже абстракция. Чтоб вывести слово на консоль мы используем оператор <<, этот же оператор мы используем, чтобы записать слово в файл. А то, что там вызываются совершенно разные функции, нас это не волнует. А то, что это ни какие не потоки, а объекты совершенно определенных классов, там это вообще дело десятое.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.10.2012, 18:49     Зачем нужны адапторы контейнеров? #17
Цитата Сообщение от maxon887 Посмотреть сообщение
Мол не твоё это дело как оно там работает(((((
В этом заключается суть ООП, в частности, одного из его китов - инкапсуляции. Как бы вы логичнее всего организовали std::vector, что вам приходит в голову? Мне лично сразу приходит в голову хранить его как указатель на начало выделенной памяти и размер. Ан нет, разработчики, например, реализации stl в gcc посчитали, что удобнее хранить вектор как адреса начала и конца памяти. Таким образом, при вызове метода std::vector::size размер вычисляется как разность этих адресов. Но программисту-то на эту подробность наплевать, ему главное, чтобы вектор свои задачи выполнял, не больше, не меньше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2012, 20:34     Зачем нужны адапторы контейнеров?
Еще ссылки по теме:

C++ Зачем нужны деревья?
C++ зачем нужны итераторы?
C++ Зачем нужны указатели?

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.10.2012, 20:34     Зачем нужны адапторы контейнеров? #18
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Объясните, пожалуйста, зачем нужны адаптеры контейнеров. Не понимаю смысл их существования, у них и функции какие-то кривые по сравнению с функциями контейнеров...
Хотя бы для быстродействия. Допустим, что вам нужен именно стек(может понадобиться для различных алгоритмов). Допустим, что вы пишите под gcc и внезапно вам нужно перейти на студию. Если в gcc стек, реализованный через дек, был в несколько раз быстрее стека, реализованного через вектор, то в студии дек реализован через опу и беспощадно тормозит.
Тогда вы просто изменяете объявление своего стека с stack<int> на stack< int, vector<int> >
...
Профит.
Yandex
Объявления
17.10.2012, 20:34     Зачем нужны адапторы контейнеров?
Ответ Создать тему
Опции темы

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