Iterators
Iterator ek object hai jo container ke through "navigate" karne deta hai, pointer jaisa syntax use karke (* dereference, ++ next). Iska bada fayda ye hai ki ek hi tarah ka code (loop) kisi bhi STL container ke saath kaam karta hai — vector ho, map ho, set ho — sab par same iterator pattern chalta hai.
begin() container ke pehle element ka iterator deta hai, end() "last element ke aage" ka iterator deta hai (jaise C ka "one past the end" pointer concept) — loop condition it != container.end() hoti hai.
#include <vector>
using namespace std;
int main() {
vector<int> nums = {10, 20, 30};
for (vector<int>::iterator it = nums.begin(); it != nums.end(); it++) {
cout << *it << " "; // dereference — pointer jaisa syntax
}
// Modern C++ (auto se simpler):
for (auto it = nums.begin(); it != nums.end(); it++) {
cout << *it << " ";
}
return 0;
}- Iterator = pointer jaisa navigation object, sab containers ke liye universal
- begin()/end() = start aur "one past the end"
- Range-based for loop internally iterators use karta hai
const_iterator ek iterator hai jo container ko modify nahi kar sakta — sirf read kar sakta hai. Const containers (const vector<int>&) ke saath, ya jab modification zaroori nahi ho, const_iterator (ya cbegin()/cend()) use karna best practice hai.
vector<int> nums = {1, 2, 3};
for (vector<int>::const_iterator it = nums.cbegin(); it != nums.cend(); it++) {
cout << *it << " ";
// *it = 100; // ERROR: const_iterator se modify nahi kar sakte
}rbegin()/rend() se container ko REVERSE order mein traverse kar sakte ho — bina khud manually index ulta karke loop likhe.
vector<int> nums = {1, 2, 3, 4, 5};
for (auto it = nums.rbegin(); it != nums.rend(); it++) {
cout << *it << " "; // 5 4 3 2 1
}