![]() |
|
Модераторы: bsa |
![]()
|
|
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Если есть класс, и он возвращает методы begin(), end() которые дают итераторы, то возникает вопрос "а какой собственно тип ?". Ведь если знать тип, можно знать какие STL-алгоритмы можно использовать, а какие нет.
Как узнать тип, имея декларацию класса? Может быть заглянуть в декларацию потомка std::iterator, который возвращается этими методами ? А там если есть ряд методов, то уже делать выводы. под типом понимаю слова : одно, дву направленный, произвольный, реверсивный, итератор потока и т.д. и т.п. ;) |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
у каждого контейнера есть тайпдефы используемых им итераторов.
в данном случае вам не нужно "узнавать" тип. |
|||
|
||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 2 Всего: 173 |
См. iterator_traits::iterator_category в <iterator>.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
То есть ответ на вопрос "какой тип итератора?" это "1) открыть декларацию 2) поглядеть typedef-ы" и только так?
Возьмем пример, typedef map<std::string, system::CDevice>::iterator DrvItr_t; как понять какого типа DevItr_t ? Это сообщение отредактировал(а) EvilsInterrupt - 28.7.2010, 09:39 |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
не обязательно. итератор, по сути, это указатель на тип. разыменование итератора вернет тип.
на сколько я помню, std::map<> хранит пары(std::pair<>). значит итератор - "указатель" на пары. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
mes, программисту, чтобы случайно не написать код, который с STL-алгоритмом принимающего не те типы итераторов
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
EvilsInterrupt, почитай Мейерса, кажется у него черным по белому написано - не пишите универсальные алгоритмы для всех видов контейнеров. Ты на этапе проектирования уже должен понимать, где какой контейнер находится и какие алгоритмы к нему применимы. Если ты решил, что для твоих задач лучше всего подходит list, то за использование sort тебе придется сильно заплатить перерасходом памяти и времени. Но в тоже время, операции вставки и удаления моментальные.
|
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
bsa, Да, но сама идея STL и шаблонов, обобщить все что только можно обобщить ) Я как правило привык к ограничениям, а тут чуть ли не главная мысль ООП: обобщайте ) Вот и хочется писать правильно, т.е. обобщить все что токо можно )
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
только это не стыкуется с темой, Вы ж писали что знать надо А при обобщенном программировании знать должна программа (код), чтоб выбрать подходящее поведение. Добавлено через 2 минуты и 5 секунд да и вообще с обобщением поосторожней.. не все можно обобщить без принесения жертв. ( либо заточенность под условия, либо обилия кода на разные варианты ) |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Пока вопросов нет, думаю стоит тему закрыть. КАк появятся, открою )
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |