Si con frecuencia necesita acceder al elemento Nth de una secuencia, std::list
, que se implementa como una lista doblemente vinculada, probablemente no sea la opción correcta. std::vector
o std::deque
probablemente sería mejor.
Dicho esto, se puede obtener un iterador al elemento enésimo usando 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'
}
Para un contenedor que no proporciona acceso aleatorio, como std::list
, std::advance
llamadas operator++
en el iterador N
veces. Alternativamente, si su aplicación biblioteca estándar proporciona, usted puede llamar std::next
:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::next
se envuelve de manera efectiva una llamada a std::advance
, por lo que es más fácil para avanzar un iterador N
veces con menos líneas de código y menos variables mutables. std::next
se agregó en C++ 11.
No hay variedad - es una lista. Si desea indexar por entero, ¿por qué no usa 'vector' en su lugar? –
Si siempre quiere el elemento 0, use 'front()'. –
No he probado esto, pero supongo que myList.front() + num funcionaría aquí –