0Pricing
C++ Academy · Lección

Categorías de iteradores: input, forward, bidirectional y random

Distinga las categorías de iteradores y elija algoritmos compatibles con ellas.

Categorías de iteradores: input, forward, bidirectional y random es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué es un iterador?

Un iterador es un puntero generalizado. Los algoritmos funcionan mediante iteradores, lo que los desacopla del contenedor subyacente.

Cinco categorías de iteradores

Los iteradores se clasifican según sus capacidades:

  • Input: solo lectura, una sola pasada
  • Output: solo escritura, una sola pasada
  • Forward: lectura y escritura, varias pasadas
  • Bidirectional: pueden avanzar y retroceder
  • Random Access: pueden saltar mediante un desplazamiento entero

Iteradores de entrada

Leen una vez, avanzan y repiten. No pueden volver atrás. Ejemplo: std::istream_iterator.

std::istream_iterator<int> in(std::cin), end;
while (in != end) {
    std::cout << *in << " ";
    ++in;
}

Iteradores de salida

Solo escriben. Ejemplos: std::ostream_iterator y std::back_inserter.

std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);

Iteradores forward

Como los de entrada, pero permiten varias pasadas: puede volver a iterar desde la misma posición. Ejemplo: std::forward_list.

Iteradores bidireccionales

Iteradores forward más --. Ejemplos: std::list, std::map y std::set.

std::list<int> l = {1, 2, 3};
auto it = l.end();
--it;        // OK, points to last element

Iteradores de acceso aleatorio

Iteradores bidireccionales con saltos: it + n, it - n, it[k], it1 - it2. Ejemplos: std::vector, std::deque y arrays sin formato.

Requisitos de los algoritmos

Cada algoritmo especifica la categoría mínima de iterador que necesita. std::sort requiere acceso aleatorio; std::find solo requiere entrada.

Rasgos de los iteradores

std::iterator_traits<Iter> expone en tiempo de compilación el tipo de valor del iterador, su categoría y otras propiedades.

using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;

std::advance y std::distance

Mueva un iterador o mida una distancia de forma genérica. Usan la categoría para elegir la implementación más eficiente.

auto it = v.begin();
std::advance(it, 5);              // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);

Iteradores personalizados

Para escribir el suyo propio, defina los alias de tipos y las operaciones requeridas por la categoría elegida: operator*, operator++, operator==, etc.

Conceptos de iteradores de C++20

C++20 añadió conceptos formales como std::input_iterator, std::forward_iterator y std::random_access_iterator. Sustituyen al sistema anterior basado en etiquetas.

Comprobación rápida

¿Qué categoría de iterador admite la expresión it + n en tiempo constante?

Resumen

Los iteradores se clasifican por capacidad: entrada, salida, forward, bidireccional y acceso aleatorio. Los algoritmos requieren una categoría mínima. Los iteradores de vector ofrecen acceso aleatorio; los de list y map son bidireccionales.

Preguntas frecuentes

¿La lección «Categorías de iteradores: input, forward, bidirectional y random» es gratis?

Sí — el texto completo de «Categorías de iteradores: input, forward, bidirectional y random» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Categorías de iteradores: input, forward, bidirectional y random»?

Distinga las categorías de iteradores y elija algoritmos compatibles con ellas. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Categorías de iteradores: input, forward, bidirectional y random»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Categorías de iteradores: input, forward, bidirectional y random
  2. Patrones habituales de iteradores: begin, end y advance
  3. Introducción a la biblioteca Ranges de C++20
  4. Adaptadores de rangos: views::filter, transform y take
← Volver a C++ Academy