![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
Захотелось странного, а именно -- сделать свой контейнер, совместимый с STL (ну, и внутри будет что-нить STL-евское). К этому контейнеру нужны будут итераторы. Правильно-ли я понял, что для совместимости с STL-итераторами контейнер должен всего-лишь обеспечивать заданную семантику для определённых (итератором) операций?
|
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
тут подобное обсуждалось
|
|||
|
||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
В "руководстве по эксплуатации" STL-я написано буквально следующее:
и идёт таблица операторов (и всяческих конструкторов) с описанием того, что эти операторы/конструкторы должны выдавать. Так же, нужно определить функции контейнера begin() и end() (может быть, и rbegin(), rend()), которые должны возвращать соответствующие итераторы. Я в верном направлении думаю? |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
да, именно так и нужно делать
|
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Итераторы можеш писать свои придумывать что хочеш главное что бы функция имелось что то проде toVecotr(или какой ты контейнер делаеш)
Если тебе не нравится производительности то тесное взаимодействия не с STL не пренесёт производительности(STL - это относительно медленое явления С++ операция new долго да и алгоритм не самый кайф в STL) Это всё пиши есчё)) |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
"Самодельный" STL-совместимый контейнер, и стандартные итераторы
При таком исполнении особено ) относительно чего? к примеру для vector, многократное выделение памяти заменяется умелым использованием reserve(). Кстати а какая операция создания объекта в C++ быстрая ? как Вы думаете , а с чего вдруг захотелось сделать именно стл-совместимый? ИМХО как раз потому, что автору эти самые алгоритмы в самый кайф. Это сообщение отредактировал(а) mes - 8.10.2008, 11:35 |
|||
|
||||
scrolscrol |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 8.10.2008 Репутация: -1 Всего: нет |
||||
|
||||
Lycifer |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
mes - ты наверное глуповат?
![]()
то тесное взаимодействия не с STL не пренесёт производительности = то тесное взаимодействия с STL не пренесёт производительности(ошибочка не)
![]()
Поэтому и было предложено создание в функции нового контейнера(то и есть STL toVector), и наче придётся глубое использование указателей и ссылок, иначе этот контейнер не оправдывает себя mes - не знаеш не пиши. |
||||||
|
|||||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
что - это? и вообще, Lycifer, если пытаешься что-то доказать, то хоть аргументируй по-человечески. из предыдущено поста понятны только 2 фразы - первая и последняя. а пока объясни, как ты собираешься реализовывать функцию toVector так, чтобы результат оказался быстрее, чем если реализовать функции begin(), end() etc ? |
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
В С++ одно из слабых мест это new(malloc) поэтому использование allocator's выигруеш в производительности но вот в памяти нет.
Итераторы это хорошо, ну вот вопрос в другом зачем вообще там всякии vector,map,set - есть итераторы и в придачу алгоритмы, что ещё надо? Не знаю как Alek86, а мне удобней с полноценным контейнером работать. Только не надо доказывать что будет контейнер создан из итераторов, тогда возникает куча вопросов(пример кто убъет память, когда её убить, синхронизация на потоках ) - вообщем память стоновится не управляемая.... |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вообще-то это слабое место сей в плюсах ты сам можешь переписать new, используя что угодно помнится, даже где-то были аллокаторы, реализующие память со "сборкой мусора"... Добавлено через 1 минуту и 54 секунды
мне тоже и потому лучше создать свой контейнер, который будет полностью подходить под vector из стандарта, чем реализовывать функцию ToVector() |
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
И кто не понятно пишет?
Это все пиши есчё!!!!) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |