Эффективный способ относиться к имени типа iterator, не печатая все контейнерное определение?

Есть ли более эффективный способ относиться к имени типа iterator контейнера, чем печать

std::unordered_map::iterator 

каждый раз мне нужен iterator?

Конечно, есть

typedef boost::unordered_map::iterator classitr

но представление определения типа для каждого контейнера не кажется мне очень удобочитаемым кодом. Быть в новинку для C++ и предположение, что у каждого обычно есть ссылка на контейнер, который они хотят использовать - являются там чем-то вроде

Container x;

x::iterator_type i

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

2
nl ja de
@PeterWood я все еще очень думаю в терминах C, таким образом, я заметил все эти функции, но никогда не использовал их очень. Я дам этому попытку. Спасибо!
добавлено автор Aaa, источник
При использовании библиотека алгоритмов вы won' t должны назвать типы iterator как очень.
добавлено автор Peter Wood, источник

2 ответы

Это - одна из причин, почему C++ 11 ввел новое значение автомобиль ключевое слово:

auto it = vec.begin();

Компилятор разработает тип это от инициализатора подобным образом к вычету типа шаблона.

ПредC++ 11, обычный подход должен был использовать определение типа s, как вы предположили. Может часто быть самым полезным определение типа контейнер и затем дать все относительно этого:

typedef std::unordered_map map;
map m;
map::iterator = m.begin();

Можно дать более понятное имя вашему определение типа , который описывает точно, какой карта это. Например, если бы у вас была карта от имен до номеров телефона, вы могли бы назвать ее phone_map , и iterator будет phone_map:: iterator .

<глоток> автомобиль является также полезным инструментом для прекрасного отправления

3
добавлено
@Stefan Не "принесет", но "принес". Используя определением типа s был ПредC++ стандартного решения 11.
добавлено автор Joseph Mansfield, источник
@sftrabbit: "Принесет" к его коду, когда он переключится. Не все используют C++ 11. Я для каждый вполне еще не принесет его в наш производственный код.
добавлено автор Lightness Races in Orbit, источник
Спасибо. Я не полностью до скорости с тем, что C++ 11 стандартов принесут - так я didn' t думают об этом. Есть ли кто-либо не C++ 11 путей? (жаль о моем предыдущем коротком ответе, я не знал, что удар входит, представит мой комментарий),
добавлено автор Aaa, источник
Typedef' луг контейнер кажется довольно хорошим; я haven' t мысль об этом. И спасибо за подтверждение, что нет никакого "чистого" ПредC++ 11 решений, подобных тому, на что я надеялся. Что касается C++ 11, так как мое знание с новым стандартом совсем не близкое, и таблица поддержки на апачской Wiki заставляет меня вызвать головокружение, я думаю, что придерживаюсь изучения C++ сначала и затем создания шага к C++ 11, когда я вижу его преимущества непосредственно. Ваш ответ привел мне первый пример этого.:) Спасибо за большой и подробный ответ.
добавлено автор Aaa, источник

В C++ 11 можно использовать decltype , чтобы получить тип от переменной.

Напишите:

std::unordered_map m;
decltype(m)::iterator it = m.begin();

Of course, if you're in C++1, then you can also just Напишите:

std::unordered_map m;
auto it = m.begin();
2
добавлено
Спасибо - decltype, кажется, делает точно, на что я надеялся в моем вопросе. Еще одна причина надеяться делать шаг к C++ 11.:) Знание в ТАК удивительно.
добавлено автор Aaa, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest