🧭
STL

Iterators

Container Ke Andar Ghoomne Ka Universal Tarika
💡 Iterator ek bookmark jaisa hai jo kisi bhi book (container) mein use ho sakta hai — chahe book vector ho ya map ya set, bookmark ka concept (agla page, pichla page) same rehta hai.

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 ek bookmark jaisa hai jo kisi bhi book (container) mein use ho sakta hai — chahe book vector ho ya map ya set, bookmark ka concept (agla page, pichla page) same rehta hai.
1 / 2
⚡ झट से Recap
  • 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
इस page में (2 subtopics)

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
}
💡Tip: Modern C++ mein auto se ye distinction usually automatic ho jaata hai — const auto &container ke saath auto khud const_iterator generate kar deta hai.

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
}
💡Tip: rbegin() logically "last element" point karta hai, rend() "pehle element ke pehle" — internally implementation reverse_iterator adapter use karta hai jo normal iterator ko wrap karta hai.