Ich komme aus Java in C++ und habe eine gemeinsame Design-Situation, in der ich ein Element (ein nicht-primitives) habe, das ich aus einem std :: vector entfernen möchte.ArrayList-style indexOf für std :: Vektor in C++?
in Java würde ich etwas wie schreiben: arrayList.remove (arrayList.indexOf (myClassInstance));
in C++, mit einem std :: vector, was ist die beste/leistungsfähigste/sauberste Art, dies zu tun?
Das Beste, was ich mir vorstellen kann, ist, einen Verweis auf die Instanz zu erstellen, nach der ich suche, und dann durch den Vektor zu iterieren, bis ich diese Referenz finde. im Wesentlichen, um die Speicheradresse jedes Elements in dem Vektor mit der Referenz zu vergleichen, bis ich eine Übereinstimmung erhalte.
Bin ich auf dem richtigen Weg? oder gibt es einen besseren Weg? (vielleicht mit einem anderen Std-Container, ich habe bisher nur std :: vector verwendet.)
Sie haben eine Sammlung von Zeigern oder Shared_ptr Unter der Annahme, std :: Set kann auch für Sie arbeiten , nur die Zeigeradressen zu vergleichen. Wenn Sie die Adresse des Artikels kennen, nach dem Sie suchen, nur mySet.löschen (ptr); – CashCow
@CashCow - gibt es einen großen Leistungsunterschied bei der Iteration über alle Member eines std :: set gegenüber einem std: vector? An anderer Stelle in meinem Code rufe ich für jedes Element in jedem Zyklus eine Methode auf. – ericsoco