Voraussetzung: C++ STL , Iteratoren in C++ STL

Der Iterator ist nicht die einzige Möglichkeit, einen beliebigen STL-Container zu durchlaufen . Es gibt eine bessere und effizientere Möglichkeit, Vektoren zu durchlaufen, ohne Iteratoren zu verwenden. Es kann mit den in jedem Container gespeicherten Werten iteriert werden. Unten ist die Syntax für das gleiche für Vektoren:

Syntax:

for(auto itr : vector_name)

Erläuterung: Hier ist itr der in Vektor gespeicherte Wert, der zum Durchlaufen von Vektoren verwendet wird. Unten ist das Programm, um dasselbe zu veranschaulichen:

// 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;
}
Ausgabe:

1 2 3 4

Aktualisieren von Werten im Vektor: Zum Aktualisieren von Werten in einem Vektor ohne Verwendung von Iteratoren werden die im Vektor gespeicherten Werte unter Verwendung von Referenzen durchlaufen und der Wert aktualisiert. Unten ist die Syntax für dasselbe:

Syntax:

for(auto &itr : vector_name)

Erläuterung: Hier ist itr eine Adresse für den in Vektor gespeicherten Wert, der zum Durchlaufen von Vektoren verwendet wird. Unten ist das Programm, um dasselbe zu veranschaulichen:

// 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;
}
Ausgabe:
Vektor vor Aktualisierung: 1 2 3 4 
Vektor nach Aktualisierung: 2 4 6 8

Vorteile:

  • Einfach und leicht zu schreibender Code.
  • Besser und effizienter als die Iteratoren-Methode.

Nachteile:

  • Es wird nur in Vorwärtsrichtung iteriert.
  • Hält keinen Zähler, dh wir können den Index eines Elements mit dieser Traversierung nicht finden. Zum Zählen des Elements muss der Zähler explizit genommen werden.

Wir können auch mit der gleichen Traversierung in vielen verschiedenen Containern in C++ iterieren . Unten ist die Illustration für dasselbe:

  1. Karte:




    // 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;
    }
    Ausgabe:
    1 1
    2 2
    3 3
    
  2. Karte der Vektoren:




    // 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;
    }
    Ausgabe:
    1 -> 1 2 3 
    2 -> 2 3 8 9 
    3 -> 10 -2
    
  3. Satz:




    // 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;
    }
    Ausgabe:
    -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;
    }
    Ausgabe:
    3 2 1 4 5