stl iteratoren anwenden
-
Ich glaube er will nur wissen wie das geht oder?
Sovok schrieb:
ok dann werden sie nicht dazu verwendet aber sind
nach meinem wissen urprünglich dafür gedachtweiss jemand wies geht?
vector<Klasse*> Klassenvector; // Füllen, damit arbeiten etc. vector<Klasse*>::iterator itBegin = Klassenvector.begin(); // Iterator der "aufs erste Element zeigt" holen long value = (*itBegin)->Attrib1();
Das war alles, ungeprüft eben so hier getippt.
-
ne ich habs anders gemeint
vector<Klasse*> Klassenvector; // Füllen, damit arbeiten etc. vector<Klasse*>::Spezial_Iterator itBegin = Klassenvector.begin(); // Iterator der "aufs erste element mit attrib1() == 100 und attrib2() == 200" holen //d.h. der iterator prüft intern die werte (*itBegin); //hat garantiert attrib1() == 100 und attrib2() == 200 oder ist == Klassenvector.end()
-
vector<Klasse*>::Spezial_Iterator itBegin = Klassenvector.begin(); for(itBegin; itBegin != Klassenvector.end(); ++itBegin) { if((*itBegin)->Attrib1() == 100 && (*itBegin)->Attrib2() == 200) break; } (*itBegin); //hat garantiert attrib1() == 100 und attrib2() == 200 oder ist == Klassenvector.end()
Oder versteh ich da etwas grundsätzlich falsch
-
Ichdenke schrieb:
Oder versteh ich da etwas grundsätzlich falsch
ja tust du
ich will dass der iterator intern die werte prüft
"unsichtbar im code der durch die liste geht"also ein spezieller interator die mir nur objekte mit bestimmten werten liefert
-
"ein iterator ist alles was sich wie ein iterator verhält"
das was du willst, ist garkein iterator mehr
ansonsten:sort benutzen,sodass die benötigten werte am anfang stehen, und diese dann solange bearbeiten, bis man am erstenw ert angekommen ist, der nicht mehr den anforderungen entspricht
-
schade
mir hat mal jemand erzählt, dass des geht
-
Hallo,
was du brauchst ist ein filter_iterator wie z.B. http://www.boost.org/libs/iterator/doc/filter_iterator.htmlOder du verzichtest auf handgeschriebene Schleifen und verwendest stattdessen einen Standard-Algo zusammen mit einem Prädikat.
-
Sovok schrieb:
z.b. durch alle elemente mit attrib1() == 100 und attrib2() == 200
#include <boost/iterator/counting_iterator.hpp> #include <algorithm> #include <iostream> int main() { Klasse klass; //... std::copy( boost::make_counting_iterator(klass.attrib1()), boost::make_counting_iterator(klass.attrib2()), std::ostream_iterator<long>(std::cout, "\t")); //... }
-
lol in letzter zeit kommts mir so vor als würde ich bei jeder frage auf boost verwiesen
gibts aussichten, dass teile von boost irgendwann zum offiziellen c++ standard gehören?
-
ja, einige teile sind soweit ich weis, fest eingeplant