Прошло четыре года, Google дал мне этот ответ. С стандартом C ++ 11 (он же C ++ 0x ) фактически появился новый приятный способ сделать это (ценой нарушения обратной совместимости). ): новое ключевое слово auto
. Это избавляет вас от необходимости явно указывать тип используемого итератора (повторяя векторный тип), когда очевидно (для компилятора), какой тип использовать. С v
, являющимся вашим vector
, вы можете сделать что-то вроде этого:
for ( auto i = v.begin(); i != v.end(); i++ ) {
std::cout << *i << std::endl;
}
C ++ 11 идет еще дальше и дает вам специальный синтаксис для перебора коллекций, таких как векторы. Это устраняет необходимость писать вещи, которые всегда одинаковы:
for ( auto &i : v ) {
std::cout << i << std::endl;
}
Чтобы увидеть это в работающей программе, соберите файл auto.cpp
:
#include <vector>
#include <iostream>
int main(void) {
std::vector<int> v = std::vector<int>();
v.push_back(17);
v.push_back(12);
v.push_back(23);
v.push_back(42);
for ( auto &i : v ) {
std::cout << i << std::endl;
}
return 0;
}
На момент написания этого, когда вы компилируете это с g ++ , вам обычно нужно настроить его на работу с новым стандартом, задав дополнительный флаг:
g++ -std=c++0x -o auto auto.cpp
Теперь вы можете запустить пример:
$ ./auto
17
12
23
42
Обратите внимание , что инструкции по компиляции и запуску относятся только к gnu c ++ компилятору на Linux , программа должна быть независимой от платформы (и компилятора).