Ich habe also eine Liste:
list<Object> myList;
myList.push_back(Object myObject);
Ich bin mir nicht sicher, aber ich bin zuversichtlich, dass dies das "0te" Element in dem Array sein würde. Gibt es eine Funktion, die ich verwenden kann, die "myObject" zurückgeben wird?
Object copy = myList.find_element(0);
?
Wenn Sie häufig auf das N-te Element einer Folge zugreifen müssen, ist std::list
, das als doppelt verkettete Liste implementiert ist, wahrscheinlich nicht die richtige Wahl. std::vector" oder "std::deque" wären wahrscheinlich besser.
Abgesehen davon können Sie mit std::advance
einen Iterator bis zum N-ten Element erhalten:
std::list<Object> l;
// add elements to list 'l'...
unsigned N = /* index of the element you want to retrieve */;
if (l.size() > N)
{
std::list<Object>::iterator it = l.begin();
std::advance(it, N);
// 'it' points to the element at index 'N'
}
Für einen Container, der keinen zufälligen Zugriff bietet, wie std::list
, ruft std::advance
operator++
auf den Iterator N
mal auf. Alternativ können Sie std::next
aufrufen, wenn Ihre Implementierung der Standardbibliothek dies vorsieht:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::next" ist effektiv ein Wrapper für den Aufruf von "std::advance", was es einfacher macht, einen Iterator N
-mal mit weniger Codezeilen und weniger veränderbaren Variablen weiterzuschalten. std::next" wurde in C++11 hinzugefügt.
std::list" bietet keine Funktion, um ein Element mit einem Index zu erhalten. Sie können versuchen, es zu erhalten, indem Sie einen Code schreiben, was 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:
std::vector<Object> objects;
objects.push_back(myObject);
Object const & x = objects[0]; //index isn't checked
Object const & y = objects.at(0); //index is checked
std::list<Object> l;
std::list<Object>::iterator ptr;
int i;
for( i = 0 , ptr = l.begin() ; i < N && ptr != l.end() ; i++ , ptr++ );
if( ptr == l.end() ) {
// list too short
} else {
// 'ptr' points to N-th element of list
}