Si necesita acceder con frecuencia al enésimo elemento de una secuencia, std::listque se implementa como una lista doblemente enlazada, probablemente no sea la opción correcta. std::vectoro std::dequeprobablemente sería mejor.
Dicho esto, puede obtener un iterador para el elemento N 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::advancellamadas operator++en el iterador Nveces. Alternativamente, si la implementación de su biblioteca estándar lo proporciona, puede llamar a std::next:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::nextes efectivamente envuelve una llamada a std::advance, lo que facilita el avance de los Ntiempos de un iterador con menos líneas de código y menos variables mutables. std::nextse agregó en C ++ 11.
vectoren su lugar?