Cargando...

Iteradores y su uso en la STL de C++

Aprende los iteradores en C++ y su uso con contenedores y algoritmos STL para recorrer y manipular datos de forma eficiente.

La biblioteca estándar de C++ (STL) se basa en una poderosa abstracción llamada iterador, que permite recorrer estructuras de datos de forma uniforme. Los iteradores son una parte fundamental de los contenedores STL (vector, list, map, set…) y ofrecen un mecanismo coherente para avanzar de un elemento a otro. En este artículo se explican los tipos de iteradores, cómo utilizarlos y cómo interactúan con los algoritmos de la STL.


1) ¿Qué es un iterador?

Un iterador es un objeto que permite acceder a los elementos de un contenedor. Se comporta de forma similar a un puntero, pero está completamente abstraído por la STL.

Sus funciones principales:

Ejemplo


#include <vector>
#include <iostream>
using namespace std;

int main() {
    vector<int> v = {10, 20, 30};

    vector<int>::iterator it = v.begin();

    cout << *it; // 10
}

2) Tipos de iteradores

Los contenedores STL admiten diferentes categorías de iteradores:

Ejemplos:
vector → random access iterator
list → bidirectional iterator
map/set → bidirectional iterator


3) begin() y end()

Todos los contenedores STL proporcionan dos funciones esenciales:


vector<int> v = {1, 2, 3};

for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it << " ";
}

4) Iterador constante (const_iterator)

Un iterador constante se utiliza para acceso de solo lectura; no permite modificar los elementos.


vector<int> v = {10, 20, 30};

vector<int>::const_iterator it = v.begin();

// *it = 50; // ERROR: no se puede modificar mediante const_iterator

cout << *it;

5) Iteradores inversos (rbegin & rend)

Permiten recorrer un contenedor en sentido inverso.


vector<int> v = {1, 2, 3};

for (auto it = v.rbegin(); it != v.rend(); ++it) {
    cout << *it << " ";
}
// Salida: 3 2 1

6) Modificar elementos con iteradores


vector<int> v = {10, 20, 30};

for (auto it = v.begin(); it != v.end(); ++it) {
    *it *= 2;
}

for (int x : v)
    cout << x << " ";
// Salida: 20 40 60

7) Iteradores y algoritmos STL

Todos los algoritmos STL funcionan mediante iteradores.

Uso con sort


#include <algorithm>

vector<int> v = {50, 20, 10};

sort(v.begin(), v.end());

Uso con find


auto it = find(v.begin(), v.end(), 20);

Uso con count


int c = count(v.begin(), v.end(), 10);

8) Iterar sobre map y set


#include <map>
#include <iostream>
using namespace std;

int main() {
    map<string, int> ages = {
        {"Carlos", 25},
        {"María", 30},
        {"Javier", 28}
    };

    for (auto it = ages.begin(); it != ages.end(); ++it) {
        cout << it->first << " : " << it->second << endl;
    }
}

9) Eliminar un elemento usando un iterador

Los iteradores permiten eliminar un elemento específico de forma precisa.


vector<int> v = {10, 20, 30, 40};

auto it = find(v.begin(), v.end(), 20);

if (it != v.end())
    v.erase(it);

10) Ventajas de usar iteradores


11) TL;DR

  • Iterador: forma estándar de acceder a los elementos de un contenedor
  • begin/end → iteración hacia adelante
  • rbegin/rend → iteración inversa
  • const_iterator → solo lectura
  • Los algoritmos STL dependen completamente de los iteradores
  • Ejemplos probados en Visual Studio 2022 y GCC

Artículos relacionados