📖
C++
  • 1. C++ Basics
    • 1.1 Input, Output, and Program Structure
      • 1.1.1 Welcome to Data Structures in C++
      • 1.1.2 Hello World
      • 1.1.3 Input and Output
      • 1.1.4 getline and cin
      • 1.1.5 Program Structure
    • 1.2 Basic Data Types
      • 1.2.1 Basic Data Types
        • 1.2.1.1 Differences between C++ and Java Data Types and Variables
      • 1.2.2 Strings and Characters
      • 1.2.3 Numbers
      • 1.2.4 Booleans
    • 1.3 Conditional Statements
      • 1.3.1 Conditional Statements
      • 1.3.2 Basic If/Else Statements
      • 1.3.3 Comparing Strings
      • 1.3.4 Logical Operators
    • 1.4 Loops
      • 1.4.1 Loops
      • 1.4.2 For Loops
      • 1.4.3 While Loops
      • 1.4.4 Searching a String
    • 1.5 Functions in C++
      • 1.5.1 Functions in C++
      • 1.5.2 Defining and Calling Functions
      • 1.5.3 Passing by Reference vs Value
      • 1.5.4 Function Prototypes
  • 2. Going Beyond the Basics
    • 2.1 Vector Basics
      • 2.1.1 Vector Basics
      • 2.1.2 Creating and Accessing Vectors
      • 2.1.3 Inserting into a Vector
      • 2.1.4 Looping Through a Vector
    • 2.2 Function Default Values
      • 2.2.1 Function Default Values
      • 2.2.2 Default Values
      • 2.2.3 Default Values with a Prototype
      • 2.2.4 Example: Splitting a String
    • 2.3 Structs
      • 2.3.1 Structs
      • 2.3.2 Defining and Accessing Structs
      • 2.3.3 Using Structs: Line Length
    • 2.4 File Input/Output
      • 2.4.1 File Input/Output
      • 2.4.2 Reading in a File
      • 2.4.3 Processing a File
      • 2.4.4 Writing to a File
      • 2.4.5 Creating an Input Stream from a String
    • 2.5 Error Handling
      • 2.5.1 Error Handling
      • 2.5.2 Validating a Number
      • 2.5.3 Validating a Vector Index
      • 2.5.4 Throwing Other Values
  • 3. Libraries
    • 3.1 Header Files
      • 3.1.1 Header Files
      • 3.1.2 Header File
      • 3.1.3 Header and Implementation File
      • 3.1.4 Safer Header
    • 3.2 Using Libraries
      • 3.2.1 Using a Utilities Library
      • 3.2.2 The Util Library
  • 4. 2D Vectors, Stacks, and Queues
    • 4.1 2D Vectors
      • 4.1.1 2D Vectors
      • 4.1.2 The 2D Vector
      • 4.1.3 Creating a 2D Vector
    • 4.3 Stacks
      • 4.3.1 Stacks
      • 4.3.2 Basic Stack
      • 4.3.3 Stack Example: Reverse a String
    • 4.5 Queues
      • 4.5.1 Queues
      • 4.5.2 Basic Queues
      • 4.5.3 Queue Example: Next in Line
  • 5. Sets and Maps
    • 5.1 Pairs and Iterators
      • 5.1.1 Pairs and Iterators
      • 5.1.2 Pairs
      • 5.1.3 Iterators
    • 5.3 Sets
      • 5.3.1 Sets
      • 5.3.2 Basic Sets
      • 5.3.3 Iterating Through a Set
      • 5.3.4 Sets of Struct Values
    • 5.4 Maps
      • 5.4.1 Maps
      • 5.4.2 Map Basics
      • 5.4.3 Iterating Through a Map
      • 5.4.4 Updating Maps
  • 6. Recursion
    • 6.1 Functional Recursion
      • 6.1.1 Functional Recursion
      • 6.1.2 Basic Recursive Problem: Exponential
      • 6.1.3 Recursion Example: Reverse String
      • 6.1.4 Recursion Example: Make Sum
    • 6.2 Procedural Recursion
      • 6.2.1 Procedural Recursion
      • 6.2.2 Print Binary
      • 6.2.3 Print Permutations
      • 6.2.4 Depth vs Breadth Search
  • 7. Pointers, Linked Lists, and Graphs
    • 7.1 Pointers
      • 7.1.1 Pointers
      • 7.1.2 Assigning and Updating Pointers
      • 7.1.3 Pointers and Functions
      • 7.1.4 Pointers and Data Structures
    • 7.2 Linked Lists
      • 7.2.1 Linked Lists
      • 7.2.2 Basic Linked List
      • 7.2.3 Linked List and Recursion
      • 7.2.4 Example: Sorted Phone Book
      • 7.2.5 Doubly Linked List
    • 7.3 Graphs
      • 7.3.1 Graphs
      • 7.3.2 Basic Example: Breadth First Search
      • 7.3.3 Application: Connecting Cities
Powered by GitBook
On this page
  • Creating the Iterator
  • Iterating Through a Data Structure
  • Accessing Values Using the Iterator
  • Try This Example
  1. 5. Sets and Maps
  2. 5.1 Pairs and Iterators

5.1.3 Iterators

Previous5.1.2 PairsNext5.3 Sets

Last updated 3 years ago

Back in the , you were briefly introduced to iterators. You saw how iterators could be used to set the position to insert into a vector. In this lesson, you will have a chance to explore iterators further in relation to vectors.

It is typical to use a standard for loop to iterate through a vector, however an iterator can also be used. It is important to take time to understand how iterators can be used to loop through all the values of a data structure because they will be the only option when we get to our associative data structures such as sets and maps.

Creating the Iterator

When declaring the iterator, you need to reference the entire variable type and then a double colon :: followed by the keyword iterator. You then assign it to the beginning of the data structure using the begin() command.

Here are a couple of examples:

vector<int> nums {1, 2, 3, 4, 5};

vector<int>::iterator itr = nums.begin();
vector<students> classRoster;

vector<students>::iterator itr = classRoster.begin();

The iterator variable name can be anything. In these examples, itr is used.

Iterating Through a Data Structure

Using an iterator, you can make use of either a for loop or a while loop to iterate through the data structure such as a vector.

Take a look at the basic structure:

vector<int> nums {1, 2, 3, 4, 5};

for (vector<int>::iterator itr = nums.begin(); itr != nums.end(); itr ++) {
    // Loop code
}

You will notice that the structure is very similar to any other for loop iteration. You initialize a value, loop until a condition is met, and increment up.

(Oftentimes you may see the iterator declared before the for loop to help shorten the for loop line. Either way is acceptable.)

Accessing Values Using the Iterator

As you iterate through the data structure, the iterator that you created actually points to the value each time through. To access that value, you need to use the dereference operator, *.

Take a look at the example below to see how this pointer works behind the scenes.

Image courtesy of pythontutor.com

In this example above, notice how the iterator points to each value in the vector in order. By using *itr, the program can access the value in the array to print it out.

Once the loop reaches the end of the vector, the for loop is complete and the loop ends.

The same loop can be completed as a while loop:

vector<int> nums {1, 2, 3, 4, 5};
vector<int>::iterator itr = nums.begin();

while (itr != nums.end()) {
    cout << *itr << " ";
    itr ++;
}

In this example, the iterator was incremented up by 1. It is possible to increment by something other than 1, however, caution needs to be used. Unlike other loops that loop while a value is less than another value, iteration loops are looping while a value does not equal another value. If you are not careful, you may end up passing the endpoint without equalling it.

If that happens, you will have an endless loop of printing out garbage! See this example at the bottom of this code.

Vectors lesson
Try This Example