Cómo iterar a través de un vector sin usar iteradores en C++

Requisito previo: C++ STL , Iteradores en C++ STL

El iterador no es la única forma de iterar a través de cualquier contenedor STL . Existe una forma mejor y más eficiente de iterar a través de vectores sin usar iteradores. Se puede iterar utilizando los valores almacenados en cualquier contenedor. A continuación se muestra la sintaxis de la misma para los vectores:

Sintaxis:

for(auto itr : vector_name)

Explicación: aquí itr es el valor almacenado en el vector que se utiliza para atravesar vectores. A continuación se muestra el programa para ilustrar lo mismo:

// C++ program to illustrate the above
// topic
#include <bits/stdc++.h>
using namespace std;
  
// Driver Code
int main()
{
  
    // Declare the vector
    vector<int> arr = { 1, 2, 3, 4 };
  
    // Traversing the vector using
    // values directly
    for (auto& it : arr) {
  
        // Print the values
        cout << it << ' ';
    }
    return 0;
}
Producción:

1 2 3 4

Actualización de valores en vector: para actualizar valores en un vector sin usar iteradores, recorra los valores almacenados en el vector usando referencia y actualice el valor. A continuación se muestra la sintaxis para el mismo:

Sintaxis:

for(auto &itr : vector_name)

Explicación: aquí itr es una dirección para el valor almacenado en el vector que se utiliza para atravesar vectores. A continuación se muestra el programa para ilustrar lo mismo:

// C++ program to illustrate the updation
// in vector without using iterator
#include <bits/stdc++.h>
using namespace std;
  
// Function to update the value in vector
void updateVector(vector<int> arr)
{
  
    cout << "Vector Before Update: ";
    for (auto& it : arr) {
        cout << it << ' ';
    }
  
    // Traverse using the reference to value
    // and multiply each value by 2
    for (auto& it : arr) {
        it *= 2;
    }
  
    cout << "\nVector After Update: ";
    // Print vector elements
    for (auto& it : arr) {
        cout << it << ' ';
    }
}
  
// Driver Code
int main()
{
  
    // Declare the vector
    vector<int> arr = { 1, 2, 3, 4 };
  
    // Function Call
    updateVector(arr);
    return 0;
}
Producción:

Vector Before Update: 1 2 3 4 
Vector After Update: 2 4 6 8

ventajas:

  • Código simple y fácil de escribir.
  • Mejor y eficiente que usar el método de iteradores.

Desventajas:

  • Se itera solo en la dirección de avance.
  • No mantiene ningún contador, es decir, no podemos encontrar el índice de ningún elemento con este recorrido. Para contar el elemento, el contador debe tomarse explícitamente.

También podemos iterar usando el mismo recorrido en muchos Contenedores diferentes en C++ . A continuación se muestra la ilustración de la misma:

  1. Mapa:

    // C++ program to illustrate the iteration
    // in Map without using iterator
    #include <bits/stdc++.h>
    using namespace std;
      
    // Driver Code
    int main()
    {
      
        // Declare the map
        map<int, int> Mp;
      
        // Inserting values in Map
        Mp[1] = 1;
        Mp[2] = 2;
        Mp[3] = 3;
      
        // Iterate using value in Map
        for (auto it : Mp) {
      
            // Print the elements
            cout << it.first << ' '
                 << it.second << endl;
        }
      
        return 0;
    }
    Producción:

    1 1
    2 2
    3 3
    
  2. Mapa de Vectores:

    // C++ program to illustrate the iteration
    // in Map of vectors without using iterator
    #include <bits/stdc++.h>
    using namespace std;
      
    // Driver Code
    int main()
    {
      
        // Declare the map of vectors
        map<int, vector<int> > Mp;
      
        // Temporary vector
        vector<int> temp = { 1, 2, 3 };
      
        // Inserting values in Map
        Mp[1] = temp;
      
        temp = { 2, 3, 8, 9 };
        Mp[2] = temp;
      
        temp = { 10, -2 };
        Mp[3] = temp;
      
        // Iterate using value in Map of vectors
        for (auto it : Mp) {
      
            // Print the elements
            cout << it.first << " -> ";
      
            // Traverse each vector map
            // with it.first and print the
            // elements
            for (auto jt : it.second) {
                cout << jt << ' ';
            }
      
            cout << endl;
        }
      
        return 0;
    }
    Producción:

    1 -> 1 2 3 
    2 -> 2 3 8 9 
    3 -> 10 -2
    
  3. Establecer:

    // C++ program to illustrate the iteration
    // in set without using iterator
    #include <bits/stdc++.h>
    using namespace std;
      
    // Driver Code
    int main()
    {
      
        // Declare the set
        set<int> S;
      
        // Inserting values in set
        S.insert(3);
        S.insert(-1);
        S.insert(3);
        S.insert(4);
      
        // Iterate using value in set
        for (auto it : S) {
      
            // Print the elements
            cout << it << ' ';
        }
        return 0;
    }
    Producción:

    -1 3 4
    
  4. Deque:

    // C++ program to illustrate the iteration
    // in deque without using iterator
    #include <bits/stdc++.h>
    using namespace std;
      
    // Driver Code
    int main()
    {
      
        // Declare the deque
        deque<int> dq;
      
        // Inserting values in deque
        dq.push_front(1);
        dq.push_front(2);
        dq.push_front(3);
      
        dq.push_back(4);
        dq.push_back(5);
        // Iterate using value in set
        for (auto it : dq) {
      
            // Print the elements
            cout << it << ' ';
        }
        return 0;
    }
    Producción:

    3 2 1 4 5
    

Publicación traducida automáticamente

Artículo escrito por sarthak_eddy 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 *