📊
STL

vector — Dynamic Array

STL Ka Sabse Common Container
💡 vector ek elastic bag jaisa hai — normal array ek fixed-size box hai (jitni jagah utni hi cheezein), vector khud hi bada ho jaata hai jaise-jaise tum items daalte jaate ho.

std::vector (header <vector>) C++ ka sabse zyada use hone wala container hai — ek dynamically-resizable array. push_back() se end mein add karo, size() se current size pata karo, [i] ya .at(i) se access karo — bilkul array jaisa feel hota hai, lekin size fix karne ki tension nahi.

Internally vector C ke realloc() jaisi hi strategy use karta hai — jab capacity khatam ho jaati hai, ek bada naya block allocate karke purana data copy karta hai. Isliye push_back() usually O(1) hai (amortized), lekin kabhi-kabhi (resize hote waqt) O(n) ho sakta hai.

#include <vector>
using namespace std;

int main() {
  vector<int> nums;          // khaali vector, dynamically grow karega

  nums.push_back(10);
  nums.push_back(20);
  nums.push_back(30);

  cout << nums.size() << endl;   // 3
  cout << nums[1] << endl;        // 20

  for (int n : nums) {   // range-based for se traverse
    cout << n << " ";
  }
  return 0;
}
📊
vector ek elastic bag jaisa hai — normal array ek fixed-size box hai (jitni jagah utni hi cheezein), vector khud hi bada ho jaata hai jaise-jaise tum items daalte jaate ho.
1 / 6
⚡ Quick Recap
  • vector = dynamically-resizable array
  • push_back(), size(), [i]/.at(i) — sabse common operations
  • Amortized O(1) insertion at end
On this page (2 subtopics)

vector<vector<int>> ek dynamic 2D array banata hai — har "row" khud ek vector hai, apni independent size ke saath (jagged arrays possible hain, jaha har row alag length ki ho sakti hai — normal 2D arrays mein possible nahi tha).

vector<vector<int>> grid(3, vector<int>(4, 0));  // 3x4 grid, sab 0 se initialized

grid[1][2] = 99;

for (auto &row : grid) {
  for (int val : row) {
    cout << val << " ";
  }
  cout << endl;
}
💡Tip: vector<vector<int>> grid(3, vector<int>(4, 0)); ka matlab hai "3 rows, har row ek vector<int> hai jiski size 4 hai, sab 0 se initialized."

push_back()/pop_back() sirf end par kaam karte hain. Middle se element remove/insert karne ke liye erase()/insert() use hote hain, jo iterator leke kaam karte hain — O(n) operation hai (elements shift hone padte hain).

vector<int> nums = {10, 20, 30, 40};

nums.erase(nums.begin() + 1);   // index 1 (20) remove — {10, 30, 40}

nums.insert(nums.begin() + 1, 99);  // index 1 par 99 insert — {10, 99, 30, 40}

for (int n : nums) cout << n << " ";
⚠️Common Mistake: Middle se baar-baar erase/insert karna O(n) hai har baar — agar bahut zyada middle-insertions chahiye, std::list (linked list) shayad better choice ho sakta hai vector se.