La lista no tiene un operador de acceso aleatorio [] para acceder a los elementos por índices, porque std::list almacena elementos internamente en una lista doblemente enlazada . Entonces, para acceder a un elemento en cualquier ubicación K , la idea es iterar uno por uno desde el principio hasta el elemento K. En lugar de iterar por K veces. Para ello se utiliza una función STL std::advance() para encontrarlo en tiempo lineal.
Sintaxis:
advance(InputIterator& it, Distance N)
Parámetros: esta función acepta dos parámetros, es decir, el iterador que se va a recorrer a través de la lista y la posición a la que se debe mover. La posición puede ser negativa para el acceso aleatorio y los iteradores bidireccionales .
Tipo de devolución: esta función no tiene tipo de devolución.
A continuación se muestra la implementación en C++ del enfoque anterior:
C++
// C++ program to access Kth element // of the list using advanced #include <bits/stdc++.h> using namespace std; // Driver Code int main() { // Create list with initial value 100 list<int> li(5, 100); // Insert 20 and 30 to the list li.push_back(20); li.push_back(30); // Elements of list are // 100, 100, 100, 100, 100, 20, 30 // Initialize iterator to list list<int>::iterator it = li.begin(); // Move the iterator by 5 elements advance(it, 5); // Print the element at the it cout << *it; return 0; }
20
Publicación traducida automáticamente
Artículo escrito por shivanisug18ec y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA