Entonces tengo una lista:
list<Object> myList;
myList.push_back(Object myObject);
No estoy seguro, pero estoy seguro de que este sería el elemento "0" de la matriz. ¿Hay alguna función que pueda usar que devuelva "myObject"?
Object copy = myList.find_element(0);
?
vector
en su lugar?front()
.Respuestas:
Si necesita acceder con frecuencia al enésimo elemento de una secuencia,
std::list
que se implementa como una lista doblemente enlazada, probablemente no sea la opción correcta.std::vector
ostd::deque
probablemente sería mejor.Dicho esto, puede obtener un iterador para el elemento N usando
std::advance
:Para un contenedor que no proporciona acceso aleatorio, como
std::list
,std::advance
llamadasoperator++
en el iteradorN
veces. Alternativamente, si la implementación de su biblioteca estándar lo proporciona, puede llamar astd::next
:std::next
es efectivamente envuelve una llamada astd::advance
, lo que facilita el avance de losN
tiempos de un iterador con menos líneas de código y menos variables mutables.std::next
se agregó en C ++ 11.fuente
std::advance
ostd::next
, es fácil invocar UB. No hay verificación de límites.std::list
no proporciona ninguna función para obtener un elemento dado un índice. Puede intentar obtenerlo escribiendo algún código, que no recomendaría, porque sería ineficaz si lo necesitara con frecuencia.Lo que necesita es:
std::vector
. Úselo como:fuente
fuente
Quizás no sea la forma más eficiente. Pero podrías convertir la lista en un vector.
Luego acceda al vector usando el operador [x].
Podrías poner eso en una función auxiliar:
Luego use la función de ayuda de esta manera:
fuente