usuario2398815
tengo un list
:
list<Student>* l;
y me gustaría obtener un elemento en un índice específico. Ejemplo:
l->get(4)//getting 4th element
¿Hay una función o método en list
que le permite hacerlo?
juanchopanza
std::list
no tiene un iterador de acceso aleatorio, por lo que debe pasar 4 veces desde el iterador frontal. Puede hacerlo manualmente o con estándar::avanzadoo estándar::siguiente en C++11, pero tenga en cuenta que ambas operaciones O(N) para una lista.
#include <iterator>
#include <list>
....
std::list<Student> l; // look, no pointers!
auto l_front = l.begin();
std::advance(l_front, 4);
std::cout << *l_front << '\n';
Editar: La pregunta original también se hizo sobre el vector. Esto ahora es irrelevante, pero puede ser informativo, no obstante:
std::vector
tiene iteradores de acceso aleatorio, por lo que puede realizar la operación equivalente en O(1) a través de la std::advance
, estándar::siguiente si tiene soporte para C++ 11, el []
operador, o el at()
función miembro:
std::vector<Student> v = ...;
std::cout << v[4] << '\n'; // UB if v has less than 4 elements
std::cout << v.at(4) << '\n'; // throws if v has less than 4 elements
-
Una advertencia para cualquiera que esté pensando en usar vectores, cambiar su tamaño requiere ya sea
copy
onoexcept move
constructores Si no es muy sensible al tiempo, las listas pueden ahorrarle muchos dolores de cabeza relacionados con la gestión de datos.– Seph Reed
24 de febrero de 2019 a las 22:13
Parche92
Aquí está un get()
función que devuelve el _i
el Student
en _list
.
Student get(list<Student> _list, int _i){
list<Student>::iterator it = _list.begin();
for(int i=0; i<_i; i++){
++it;
}
return *it;
}
srikanta
Si desea acceso aleatorio a los elementos, debe utilizar un vector
y luego puedes usar []
operador para obtener el cuarto elemento.
vector<Student> myvector (5); // initializes the vector with 5 elements`
myvector[3]; // gets the 4th element in the vector
Para std::vector
puedes usar
myVector.at(i)
// recuperar i-ésimo elemento
Esto plantea la pregunta por qué? ¿Seguro que quieres una lista?
– Carreras de ligereza en órbita
25 de mayo de 2013 a las 8:14
Además de lo que dijo @LightnessRacesinOrbit, si está seguro de que necesita un
list
¿estás seguro de que quieres un puntero a unlist
?– juanchopanza
25 de mayo de 2013 a las 8:16