Also habe ich eine Liste:
list<Object> myList;
myList.push_back(Object myObject);
Ich bin nicht sicher, aber ich bin zuversichtlich, dass dies das "0." Element im Array sein wird. Gibt es eine Funktion, die "myObject" zurückgibt?
Object copy = myList.find_element(0);
?
vector
stattdessen?front()
.Antworten:
Wenn Sie häufig auf das N-te Element einer Sequenz zugreifen müssen
std::list
, das als doppelt verknüpfte Liste implementiert ist, ist dies wahrscheinlich nicht die richtige Wahl.std::vector
oderstd::deque
wäre wahrscheinlich besser.Das heißt, Sie können einen Iterator für das N-te Element erhalten, indem Sie
std::advance
:Für einen Container, der keinen wahlfreien Zugriff bietet
std::list
,std::advance
werden beispielsweiseoperator++
die Iteratorzeiten aufgerufenN
. Wenn Ihre Standardbibliotheksimplementierung dies bereitstellt, können Sie alternativ Folgendes aufrufenstd::next
:std::next
Dies schließt einen Aufruf effektiv abstd::advance
und erleichtert so das Vorrücken von IteratorzeitenN
mit weniger Codezeilen und weniger veränderlichen Variablen.std::next
wurde in C ++ 11 hinzugefügt.quelle
std::advance
oderstd::next
einfach ist, UB aufzurufen. Es gibt keine Überprüfung der Grenzen.std::list
bietet keine Funktion zum Abrufen eines Elements mit einem Index. Sie können versuchen, es zu erhalten, indem Sie Code schreiben, den ich nicht empfehlen würde, da dies ineffizient wäre, wenn Sie dies häufig tun müssen.Was Sie brauchen ist :
std::vector
. Verwenden Sie es als:quelle
quelle
Vielleicht nicht der effizienteste Weg. Sie können die Liste jedoch in einen Vektor konvertieren.
Greifen Sie dann mit dem Operator [x] auf den Vektor zu.
Sie könnten das in eine Hilfsfunktion einfügen:
Verwenden Sie dann die Hilfsfunktion wie folgt:
quelle