Si vous avez fréquemment besoin d'accéder au Nième élément d'une séquence, std::list
qui est implémenté sous la forme d'une liste doublement chaînée, n'est probablement pas le bon choix. std::vector
ou std::deque
serait probablement mieux.
Cela dit, vous pouvez obtenir un itérateur vers le Nième élément en utilisant std::advance
:
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'
}
Pour un conteneur qui ne fournit pas d'accès aléatoire, comme std::list
, std::advance
appelle operator++
les N
heures d' itérateur . Sinon, si votre implémentation de bibliothèque standard le fournit, vous pouvez appeler std::next
:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::next
is encapsule efficacement un appel à std::advance
, ce qui facilite l'avance d'un itérateur N
avec moins de lignes de code et moins de variables mutables. std::next
a été ajouté dans C ++ 11.
vector
place?