Cómo obtener un elemento en el índice especificado de la lista c ++

2 minutos de lectura

avatar de usuario de user2398815
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?

  • 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 un list?

    – juanchopanza

    25 de mayo de 2013 a las 8:16

avatar de usuario de juanchopanza
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 o noexcept 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

Avatar de usuario de Patch92
Parche92

Aquí está un get() función que devuelve el _iel 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;
}

avatar de usuario de srikanta
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

¿Ha sido útil esta solución?