Iteradores Const vs Regular en C++ con ejemplos

Requisito previo: Iteradores en STL

Los iteradores son objetos similares a los punteros que se utilizan para iterar sobre una secuencia y manipular los elementos del contenedor. La ventaja de usar un iterador es que reduce las líneas de código a una sola declaración, ya que nos permiten manipular las arrays integradas en el STL usando punteros como iteradores. Un iterador puede ser un iterador constante o no constante/regular.

Iteradores constantes:

Un iterador const apunta a un elemento de tipo constante, lo que significa que el elemento al que apunta un const_iterator no se puede modificar. Aunque todavía podemos actualizar el iterador (es decir, el iterador se puede incrementar o disminuir, pero el elemento al que apunta no se puede cambiar). Solo se puede usar para acceder y no se puede usar para modificar. Si tratamos de modificar el valor del elemento usando const iterator entonces genera un error .

Iteradores regulares:

Un const_iterator normal o no apunta a un elemento dentro del contenedor y puede usarse para modificar el elemento al que apunta. Los iteradores regulares juegan un papel fundamental en la conexión del algoritmo con los contenedores junto con la manipulación de los datos almacenados dentro de los contenedores. La forma más obvia de un iterador regular es un puntero.
Un puntero puede apuntar a elementos en una array y puede iterar a través de ellos usando el operador de incremento(++) . Cada tipo de contenedor tiene un tipo de iterador regular específico diseñado para iterar a través de sus elementos.

A continuación se muestra un programa en C++ para demostrar la diferencia en el funcionamiento de los dos iteradores:

C++

// C++ program to demonstrate a regular
// and const_iterator
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
  
// Function that demonstrate regular
// iterators
void regularIterator(vector<int>& v)
{
    // Declare a regular iterator
    // to a vector
    vector<int>::iterator i;
  
    // Printing the elements of the
    // vector v using regular iterator
    for (i = v.begin(); i < v.end(); i++) {
  
        // Update elements of vector
        *i += 1;
        cout << *i << " ";
    }
}
  
// Function that demonstrate const
// iterators
void constIterator(vector<int>& v1)
{
    // Declare a const_itearor
    // to a vector
    vector<int>::const_iterator ci;
  
    // Printing the elements of the
    // vector v1 using regular iterator
    for (ci = v1.begin(); ci < v1.end(); ci++) {
  
        // Below line will throw an error
        // as we are trying to modify the
        // element to which const_iterator
        // is pointing
  
        //*ci += 1;
  
        cout << *ci << " ";
    }
}
  
// Driver Code
int main()
{
    // Declaring vectors
    vector<int> v = { 7, 2, 4 };
    vector<int> v1 = { 5, 7, 0 };
  
    // Demonstrate Regular iterator
    regularIterator(v);
  
    cout << endl;
  
    // Demonstrate Const iterator
    constIterator(v1);
    return 0;
}
Producción:

8 3 5
5 7 0

Publicación traducida automáticamente

Artículo escrito por praddyumn y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *