Macro loop für vector
-
Ich habe hier diesen Macro:
#define loopvec(vectortype, vector, iterratorName) for(vectortype::iterator iterratorName = vector.begin(); iterratorName!=vector.end(); ++iterratorName)Denn man so verwendet:
vector<int> testv; ... den vector mit irgendetwas füllen loopvec(vector<int>, testv, iter) { cout << *iter << endl; }Nun würde ich gerne einen Iterrator erstellen ohne den genauen vector typen mitgeben zu müssen. So dass ein loopvec(testv, iter) genügen würde.
Ist das irgendwie möglich?
Habe leider nur Methoden für Templates gefunden.
-
boost for each
-
Oder std::for_each http://www.cplusplus.com/reference/algorithm/for_each/
-
Oder aber du benutzt (bzw. wartest auf) einen Compiler, der schon die neue Variante mittels 'auto' (C++0x) beherrscht:
for(auto iteratorName = vector.begin(); iteratorName != vector.end(); ++iteratorName)
-
-
Oder std::for_each + Lambda (nur für C++0x / Boost).
-
theta schrieb:
Oder std::for_each + Lambda (nur für C++0x / Boost).

-
Wenn wir schon bei C++0x sind, dann lieber gleich so:
for (int val : testv)cout << val << endl;Oder mit einem Makro unter Verwendung von BOOST_FOREACH und auto:
foreach(val,vec)cout << val << endl;
-
Athar schrieb:
Wenn wir schon bei C++0x sind, dann lieber gleich so:
for (int val : testv)cout << val << endl;Oder mit einem Makro unter Verwendung von BOOST_FOREACH und auto:
foreach(val,vec)cout << val << endl;

-
Funktioniert die Range-Based For in C++0x eigentlich so, wie ich mir das vorstelle?
for (auto var : container) { // var wird jeweils kopiert } for (auto& var : container) { // var wird nur referenziert }
-
Ich sehe schon, ein größeres c++ Problem...
Alle vorgeschlagenen Lösungen haben overhead oder kommen erst mit dem C++0x Standard daher.
-
jaja, ein riesen problem..
-
Osbios schrieb:
Alle vorgeschlagenen Lösungen haben overhead
Nur wnen du deinem Compiler das Optimieren verbietest.
-
Nexus schrieb:
Funktioniert die Range-Based For in C++0x eigentlich so, wie ich mir das vorstelle?
Ja, das funktioniert genau so.
