Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Самодельный" STL-совместимый контейнер, и стандартные итераторы 
:(
    Опции темы
EnergoHokum
Дата 7.10.2008, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Захотелось странного, а именно -- сделать свой контейнер, совместимый с STL (ну, и внутри будет что-нить STL-евское). К этому контейнеру нужны будут итераторы. Правильно-ли я понял, что для совместимости с STL-итераторами контейнер должен всего-лишь обеспечивать заданную семантику для определённых (итератором) операций?
PM MAIL ICQ   Вверх
Alek86
Дата 7.10.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



тут подобное обсуждалось


--------------------
user posted image    user posted image
PM MAIL   Вверх
EnergoHokum
Дата 7.10.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



В "руководстве по эксплуатации" STL-я написано буквально следующее:
Цитата

Класс или встроенный тип X удовлетворяет требованиям некоего итератора, если справедливы следующие выражения:

и идёт таблица операторов (и всяческих конструкторов) с описанием того, что эти операторы/конструкторы должны выдавать. Так же, нужно определить функции контейнера begin() и end() (может быть, и rbegin()rend()), которые должны возвращать соответствующие итераторы. Я в верном направлении думаю?
PM MAIL ICQ   Вверх
Alek86
Дата 7.10.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



да, именно так и нужно делать


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lycifer
Дата 8.10.2008, 11:17 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Итераторы можеш писать свои придумывать что хочеш главное что бы функция имелось что то проде toVecotr(или какой ты контейнер делаеш)
Если тебе не нравится производительности то тесное взаимодействия не с STL не пренесёт производительности(STL - это относительно медленое явления С++ операция new долго да и алгоритм не самый кайф в STL)

Это всё пиши есчё))
PM MAIL ICQ   Вверх
mes
Дата 8.10.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



"Самодельный" STL-совместимый контейнер, и стандартные итераторы


Цитата(Lycifer @  8.10.2008,  11:17 Найти цитируемый пост)
что бы функция имелось что то проде toVecotr(или какой ты контейнер делаеш)

Цитата(Lycifer @  8.10.2008,  11:17 Найти цитируемый пост)
то тесное взаимодействия не с STL не пренесёт производительности

При таком исполнении особено )

Цитата(Lycifer @  8.10.2008,  11:17 Найти цитируемый пост)
STL - это относительно медленое явления

относительно чего?

Цитата(Lycifer @  8.10.2008,  11:17 Найти цитируемый пост)
операция new долго

к примеру для vector, многократное выделение памяти заменяется умелым использованием reserve().
Кстати а какая операция создания объекта в C++ быстрая ?

Цитата(Lycifer @  8.10.2008,  11:17 Найти цитируемый пост)
алгоритм не самый кайф в STL

как Вы думаете , а с чего вдруг захотелось сделать именно стл-совместимый? ИМХО как раз потому, что автору эти самые алгоритмы в самый кайф.



Это сообщение отредактировал(а) mes - 8.10.2008, 11:35


--------------------
PM MAIL WWW   Вверх
scrolscrol
Дата 8.10.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.10.2008

Репутация: -1
Всего: нет



вот посмотрите  что имеется 
http://www.lineage-game.ru/?r=Toolsa&s=10

PM MAIL   Вверх
Lycifer
Дата 8.10.2008, 12:08 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



mes - ты наверное глуповат? smile 
Цитата

к примеру для vector, многократное выделение памяти заменяется умелым использованием reserve().
Кстати а какая операция создания объекта в C++ быстрая ?
 - это allocator



то тесное взаимодействия не с STL не пренесёт производительности = то тесное взаимодействия с STL не пренесёт производительности(ошибочка не)

Цитата

При таком исполнении особено )
 - да ну? не может быть, ну канечно лучше всеврямя дергать память не жели сразу заряжать())) smile ).


Цитата

как Вы думаете , а с чего вдруг захотелось сделать именно стл-совместимый? ИМХО как раз потому, что автору эти самые алгоритмы в самый кайф.

Поэтому и было предложено создание в функции нового контейнера(то и есть STL toVector), и наче придётся глубое использование указателей и ссылок, иначе этот контейнер не оправдывает себя
mes - не знаеш не пиши.
PM MAIL ICQ   Вверх
Alek86
Дата 8.10.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Lycifer @  8.10.2008,  12:08 Найти цитируемый пост)
это allocator

что - это?


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

а пока объясни, как ты собираешься реализовывать функцию toVector так, чтобы результат оказался быстрее, чем если реализовать функции begin(), end() etc ?


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lycifer
Дата 8.10.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



В С++ одно из слабых мест это new(malloc) поэтому использование allocator's выигруеш в производительности но вот в памяти нет.

Цитата

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

а пока объясни, как ты собираешься реализовывать функцию toVector так, чтобы результат оказался быстрее, чем если реализовать функции begin(), end() etc ? 


Итераторы это хорошо, ну вот вопрос в другом зачем вообще там всякии vector,map,set -  есть итераторы и в придачу алгоритмы, что ещё надо?
Не знаю как Alek86, а мне удобней с полноценным контейнером работать.
Только не надо доказывать что будет контейнер создан из итераторов, тогда возникает куча вопросов(пример кто убъет память, когда её убить, синхронизация на потоках ) - вообщем память стоновится не управляемая....


PM MAIL ICQ   Вверх
Alek86
Дата 8.10.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Lycifer @  8.10.2008,  14:15 Найти цитируемый пост)
В С++ одно из слабых мест это new(malloc) 

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

Добавлено через 1 минуту и 54 секунды
Цитата(Lycifer @  8.10.2008,  14:15 Найти цитируемый пост)
Не знаю как Alek86, а мне удобней с полноценным контейнером работать.

мне тоже
и потому лучше создать свой контейнер, который будет полностью подходить под vector из стандарта, чем реализовывать функцию ToVector()


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lycifer
Дата 9.10.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



И кто не понятно пишет?

Цитата

Цитата(Lycifer @  8.10.2008,  14:15 )
В С++ одно из слабых мест это new(malloc) 

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

Добавлено через 1 минуту и 54 секунды
Цитата(Lycifer @  8.10.2008,  14:15 )
Не знаю как Alek86, а мне удобней с полноценным контейнером работать.

мне тоже
и потому лучше создать свой контейнер, который будет полностью подходить под vector из стандарта, чем реализовывать функцию ToVector() 

Это все пиши есчё!!!!)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0973 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.