Vier Jahre sind vergangen, Google gab mir diese Antwort. Mit dem Standard C++11 (alias C++0x ) gibt es eine neue, angenehme Möglichkeit, dies zu tun (um den Preis der Aufhebung der Abwärtskompatibilität): die neue auto
Stichwort. Es erspart Ihnen die Mühe, den Typ des zu verwendenden Iterators explizit anzugeben (und damit den Vektortyp zu wiederholen), wenn es (für den Compiler) offensichtlich ist, welcher Typ zu verwenden ist. Mit v
Ihr sein vector
können Sie etwa so vorgehen:
for ( auto i = v.begin(); i != v.end(); i++ ) {
std::cout << *i << std::endl;
}
C++11 geht sogar noch weiter und gibt Ihnen eine spezielle Syntax für die Iteration über Sammlungen wie Vektoren. Damit entfällt die Notwendigkeit, Dinge zu schreiben, die immer gleich sind:
for ( auto &i : v ) {
std::cout << i << std::endl;
}
Um es in einem funktionierenden Programm zu sehen, erstellen Sie eine Datei 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;
}
Wenn Sie diesen Artikel schreiben, kompilieren Sie ihn mit g++ müssen Sie normalerweise ein zusätzliches Flag setzen, damit es mit dem neuen Standard funktioniert:
g++ -std=c++0x -o auto auto.cpp
Jetzt können Sie das Beispiel ausführen:
$ ./auto
17
12
23
42
Bitte beachten Sie dass die Anweisungen zum Kompilieren und Ausführen spezifisch sind für gnu c++ Compiler auf Linux sollte das Programm plattform- (und compiler-) unabhängig sein.