WikiGalaxy

Personalize

C++ Iterators

Introduction to C++ Iterators:

Iterators in C++ are objects that point to an element in a container and provide a way to access the elements of that container sequentially without exposing the underlying structure. Iterators are crucial for working with standard template library (STL) containers like vectors, lists, and maps.

Types of Iterators:

There are several types of iterators in C++, including input iterators, output iterators, forward iterators, bidirectional iterators, and random-access iterators, each with different capabilities and use cases.

Basic Iterator Operations:

Iterators support operations like increment (++), dereference (*), and comparison (==, !=). These operations allow you to traverse and manipulate the elements in a container.


// Example 1: Basic Iterator Usage
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    return 0;
}
    

Example Explanation:

This example demonstrates the basic use of iterators with a vector. The iterator traverses the vector from the beginning to the end, printing each element.

Console Output:

1 2 3 4 5

Using Reverse Iterators

Reverse Iterators:

Reverse iterators allow you to iterate over a container in reverse order. They are created using the rbegin() and rend() member functions of STL containers.


// Example 2: Reverse Iterator Usage
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (std::vector<int>::reverse_iterator rit = vec.rbegin(); rit != vec.rend(); ++rit) {
        std::cout << *rit << " ";
    }
    return 0;
}
    

Example Explanation:

This example illustrates how to use reverse iterators with a vector to print its elements in reverse order.

Console Output:

5 4 3 2 1

Const Iterators

Const Iterators:

Const iterators prevent modification of the elements they point to. They are used when you want to read elements without altering them.


// Example 3: Const Iterator Usage
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (std::vector<int>::const_iterator cit = vec.cbegin(); cit != vec.cend(); ++cit) {
        std::cout << *cit << " ";
    }
    return 0;
}
    

Example Explanation:

This example shows how to use const iterators to read elements from a vector without modifying them.

Console Output:

1 2 3 4 5

Iterator with List

Iterators with List:

Lists in C++ provide bidirectional iterators, which allow you to traverse the list in both directions.


// Example 4: Iterator with List
#include <iostream>
#include <list>

int main() {
    std::list<int> lst = {1, 2, 3, 4, 5};
    for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {
        std::cout << *it << " ";
    }
    return 0;
}
    

Example Explanation:

This example demonstrates the use of iterators with a list, showcasing how to traverse and print elements.

Console Output:

1 2 3 4 5

Random Access Iterators

Random Access Iterators:

Random access iterators allow direct access to any element in a sequence, providing operations like addition and subtraction.


// Example 5: Random Access Iterator
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};
    std::vector<int>::iterator it = vec.begin();
    std::cout << *(it + 2) << std::endl; // Access third element directly
    return 0;
}
    

Example Explanation:

This example highlights the use of random access iterators with vectors, allowing direct element access.

Console Output:

30

Iterator with Map

Iterators with Map:

Maps use iterators to traverse key-value pairs. Iterators for maps point to pairs of keys and values.


// Example 6: Iterator with Map
#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> myMap = {{"a", 1}, {"b", 2}, {"c", 3}};
    for (std::map<std::string, int>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }
    return 0;
}
    

Example Explanation:

This example demonstrates iterating over a map to access and print its key-value pairs.

Console Output:

a: 1
b: 2
c: 3

Advance Iterator

Advance Function:

The advance function in C++ is used to increment an iterator by a specified number of positions, making it useful for moving iterators without a loop.


// Example 7: Advance Iterator
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};
    std::vector<int>::iterator it = vec.begin();
    std::advance(it, 3); // Move iterator to the fourth element
    std::cout << *it << std::endl;
    return 0;
}
    

Example Explanation:

This example showcases the use of the advance function to move an iterator to a specific position in a vector.

Console Output:

40

Distance Function

Distance Function:

The distance function calculates the number of steps between two iterators, useful for determining the length of a range.


// Example 8: Distance Function
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};
    std::vector<int>::iterator it1 = vec.begin();
    std::vector<int>::iterator it2 = vec.end();
    std::cout << std::distance(it1, it2) << std::endl;
    return 0;
}
    

Example Explanation:

This example demonstrates how to use the distance function to determine the number of elements in a vector.

Console Output:

5

Stream Iterators

Stream Iterators:

Stream iterators are used to read from or write to streams like cin and cout, allowing seamless integration with containers.


// Example 9: Stream Iterator
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec;
    std::cout << "Enter numbers (end with non-number): ";
    std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(vec));
    std::cout << "You entered: ";
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
    return 0;
}
    

Example Explanation:

This example uses stream iterators to read integers from the standard input and print them to the standard output.

Console Output:

Enter numbers (end with non-number): 1 2 3
You entered: 1 2 3

Insert Iterators

Insert Iterators:

Insert iterators are used to insert elements into containers. They adapt regular iterators into insert operations.


// Example 10: Insert Iterator
#include <iostream>
#include <vector>
#include <iterator>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};
    std::copy(vec2.begin(), vec2.end(), std::back_inserter(vec1));
    for (int n : vec1) {
        std::cout << n << " ";
    }
    return 0;
}
    

Example Explanation:

This example demonstrates the use of insert iterators to append elements from one vector to another.

Console Output:

1 2 3 4 5 6

logo of wikigalaxy

Newsletter

Subscribe to our newsletter for weekly updates and promotions.

Privacy Policy

 • 

Terms of Service

Copyright © WikiGalaxy 2025