Schleife rückwärts laufen lassen will nicht :(
-
nimm doch reverse iteratoren
for(vector<Foo>::reverse_iterator i=vec.rbegin(); i!=vec.rend(); ++i) { }
-
nimm doch std::map
-
das ist ein Iterator der rückwärtsläuft? kewl wusste ich gar net
danke!
-
btw:
ich würde die funktion so schreiben:struct TextureCompare { private: std::string fileName; public: TextureCompare(std::string const& fileName) : fileName(fileName) {} bool operator()(TextureItem const& item) { return item.getFileName() == fileName; //FileName ist doch wohl nicht public, oder? } }; SDL_Surface* TextureManager::getTexture (std::string const& FileName) //wir wollen doch nicht sinnlos kopieren... { std::vector<TextureItem>::reverse_iterator i= std::find(textures.rbegin(), textures.rend(), TextureCompare(FileName)); //ich mag keine ungarische notation if(i!=textures.rend()) return i->getImage(); return 0; }
-
hi,
danke könnte man statt ner extra klasse nicht das einfach so schreiben?
inline bool compareItems (TextureItem const& item, FileName) { return (item.getFileName() == FileName); }
-
und wo zauberst du FileName her?
-
äähm wie du siehst hab ich da das std::String vergessen
sorry
ich hoff aber du verstehst was ich meine, oda?
-
Oh, mir ist da ein Fehler unterlaufen :o
statt find verlangt meine Version ein find_if
Deine Funktion hat das Problem: woher nimmst du FileName?
Woher soll find/find_if wissen welchern wert FileName hatdu kannst aber auch TextureItem einen operator== für std::string spendieren, dann kannst du
find(vec.rbegin(), vec.rend(), FileName);
schreiben...
-
Hi,
ich dachte mir das eher so:
inline bool compareItems (TextureItem const& item, std::string const &FileName) { return (item.getFileName() == FileName); }
denn extra ne weitere klasse? findest du das nicht etwas umständlich? ich mein das müsste doch auch per funktion gehen, oder?
FileName bekomm ich ja im parameter der getTexture() funktion
-
=Seraph= schrieb:
FileName bekomm ich ja im parameter der getTexture() funktion
ja, du schon. aber woher weiss find_if, dass du compare(*it, FileName) aufrufen willst?
du rufst find_if ja dann so auf:
find_if(vec.rbegin(), vec.rend(), compare);und somit weiß find_if nicht, woher es FileName nehmen soll...
oder meinst du etwas anderes?
du kannst ja einfach für texturen den operator== überladen:
bool operator==(TextureItem const& item, std::string const& str) { return item.getFileName() == str; }
und dann kannst du einfach
find(vec.rbegin(), vec.rend(), FileName);
aufrufen...ich finde die 'Klasse', (welche sich übrigens Functor schimpft und hier las Predicate verwendet wird - falls du googlen willst) schöner.
aber jedem das seine