Então, eu tenho uma lista:
list<Object> myList;
myList.push_back(Object myObject);
Não tenho certeza, mas estou certo de que este seria o elemento "0" na matriz. Posso usar alguma função que retorne "myObject"?
Object copy = myList.find_element(0);
?
vector
?front()
.Respostas:
Se você freqüentemente precisa acessar o enésimo elemento de uma sequência,
std::list
que é implementado como uma lista duplamente vinculada, provavelmente não é a escolha certa.std::vector
oustd::deque
provavelmente seria melhor.Dito isso, você pode obter um iterador para o enésimo elemento usando
std::advance
:Para um contêiner que não fornece acesso aleatório, como
std::list
,std::advance
chamadasoperator++
nosN
tempos do iterador . Alternativamente, se sua implementação de biblioteca padrão fornecer, você pode chamarstd::next
:std::next
é efetivamente encapsula uma chamada parastd::advance
, tornando mais fácil avançar osN
tempos de um iterador com menos linhas de código e menos variáveis mutáveis.std::next
foi adicionado em C ++ 11.fonte
std::advance
oustd::next
, é fácil invocar o UB. Não há verificação de limites.std::list
não fornece nenhuma função para obter o elemento dado um índice. Você pode tentar obtê-lo escrevendo algum código, o que eu não recomendaria, porque seria ineficiente se você precisar fazer isso com frequência.O que você precisa é:
std::vector
. Use-o como:fonte
fonte
Talvez não seja a maneira mais eficiente. Mas você pode converter a lista em um vetor.
Em seguida, acesse o vetor usando o operador [x].
Você poderia colocar isso em uma função auxiliar:
Em seguida, use a função auxiliar desta forma:
fonte