Se você freqüentemente precisa acessar o enésimo elemento de uma sequência, std::listque é implementado como uma lista duplamente vinculada, provavelmente não é a escolha certa. std::vectorou std::dequeprovavelmente seria melhor.
Dito isso, você pode obter um iterador para o enésimo elemento 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 um contêiner que não fornece acesso aleatório, como std::list, std::advancechamadas operator++nos Ntempos do iterador . Alternativamente, se sua implementação de biblioteca padrão fornecer, você pode chamar std::next:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::nexté efetivamente encapsula uma chamada para std::advance, tornando mais fácil avançar os Ntempos de um iterador com menos linhas de código e menos variáveis mutáveis. std::nextfoi adicionado em C ++ 11.
vector?