For Loop
Overview
While the while loop is great for unpredictable durations, the for loop is specifically engineered for scenarios where you know exactly how many iterations you need (e.g., 'Loop through these 50 items').
It cleanly condenses the three critical components of looping (Initialization, Condition, and Increment) into a single, highly readable line. In modern C++ (C++11 and beyond), the traditional index-based for loop has been largely superseded by the 'Range-Based For Loop', which automatically iterates over every element in an array or container without the developer having to manually manage index variables.
Syntax
// --- 1. TRADITIONAL FOR LOOP ---
// Format: for (Initialization; Condition; Increment)
for (int i = 0; i < 5; i++) {
std::cout << "Iteration: " << i << "\n";
}
// --- 2. RANGE-BASED FOR LOOP (Modern C++11) ---
int scores[] = {90, 85, 100, 70};
// Automatically extracts each element into 'score'
for (int score : scores) {
std::cout << "Score: " << score << "\n";
}Common Pitfalls
- The 'Off-by-One' Error. Arrays in C++ are 0-indexed. If an array has 5 items, the last item is at index 4. Writing
for (int i = 0; i <= 5; i++)will access index 5, which physically exists outside the array in memory, causing a catastrophic 'Segmentation Fault' crash. - Modifying the iterator variable inside the loop body. If you write
i = i + 2;inside the loop block, you are fighting against the loop's natural incrementer, resulting in completely unpredictable, skipping behavior.
Interview Questions
for (auto x : vec)), why is it highly recommended to use a reference (for (const auto& x : vec)) instead of passing by value?If you pass by value (auto x), C++ physically copies every single object in the array into a new variable for each iteration. If you are looping through an array of 10,000 massive High-Res Image objects, copying them will instantly freeze the CPU and exhaust RAM. Passing by reference (const auto& x) simply passes a lightweight memory pointer, making the loop thousands of times faster.
Real-World Example
Using a modern, auto-referenced range-based for loop to modify elements directly in memory without making expensive copies.
#include <iostream>
#include <vector>
int main() {
std::vector<int> prices = {10, 20, 30};
// Using '&' gives us a direct reference to the original memory!
for (int& price : prices) {
price = price * 2; // Doubles the actual values in the vector!
}
// Now prices contains: {20, 40, 60}
return 0;
}Check Your Knowledge
Test your understanding of For Loop with these quick questions.