5.2.20 · HinglishC++ Programming

STL algorithms — sort, find, transform, accumulate, copy, all_of, any_of

1,970 words9 min readRead in English

5.2.20 · Coding › C++ Programming


Unifying idea: iterator range [first, last)


1. sort — ek range ko reorder karo


2. find — pehla matching element locate karo


3. transform — ek range par function map karo


4. accumulate — range ko ek value mein fold karo (<numeric>)


5. copy — ek range duplicate karo


6 & 7. all_of / any_of — range par quantifiers


Figure — STL algorithms — sort, find, transform, accumulate, copy, all_of, any_of

Recall Feynman: 12-saal ke bacche ko explain karo

Socho ek row mein toy boxes hain. Robot ko ye kehne ki jagah "box 1 se box 5 tak ja aur kuch karo," tum use ek task card dete ho:

  • sort = "inhe chhote se bade mein line karo."
  • find = "pehle red box ki taraf point karo; agar koi nahi hai, end ke aage point karo."
  • transform = "har box ko paint karo aur painted copy ek nayi shelf par rakho."
  • accumulate = "boxes par likhe saare numbers add karo, ek number se shuru karo jo main tujhe dunga."
  • copy = "yahan ek duplicate row banao (dhyan raho shelf kaafi badi ho!)."
  • all_of = "KYA SAARE boxes red hain?" any_of = "KYA KOI box red hai?" Tum sirf goal batao; robot chalna sambhal leta hai. Galti ke liye kam jagah, padhne mein aasaan.

Flashcards

Lagbhag saare STL algorithms kaun sa range convention use karte hain?
Half-open range [first, last)first included, last (one past end) excluded.
Jab value nahi milti toh find kya return karta hai?
Wahi last iterator jo tumne pass kiya tha (NOT nullptr).
accumulate ka init desired result type se kyun match karna chahiye?
Accumulator type init ka type hota hai; 0 (int) doubles par har partial sum truncate kar deta hai. 0.0 use karo.
accumulate ke zariye product ke liye identity init kya hai?
1 (sum ke liye 0 hota hai).
Tum std::list ko std::sort kyun nahi kar sakte?
sort ko random-access iterators chahiye; list mein sirf bidirectional hain — list.sort() use karo.
std::sort ka worst-case time kya hai?
— introsort iska guarantee karta hai (quicksort + heapsort fallback).
all_of empty range par kya return karta hai, aur kyun?
true — vacuous truth: hold karta hai (koi counterexample nahi).
any_of empty range par kya return karta hai?
false — koi element exist hi nahi karta predicate satisfy karne ke liye.
Empty/auto-growing vector mein safely copy kaise karte hain?
Destination iterator ke roop mein back_inserter(dst) use karo.
transform kya return karta hai?
Destination mein last written element se ek aage ka iterator.
sort ke liye ek lambda tab true return karta hai jab…?
…uska pehla argument doosre se PEHLE aana chahiye (ek strict-weak-ordering "less-than").
Vector mein find result it ka index kaise nikaalte hain?
it - v.begin() (sirf random-access iterators mein).

Connections

  • Iterators and ranges — woh abstraction jis par har algorithm ride karta hai.
  • Lambda expressions — predicates/comparators kaise pass kiye jaate hain.
  • Function objects (functors)op/pred ke liye lambdas ka alternative.
  • Time complexity Big-O aur costs ko justify karta hai.
  • std::vector — sabse common container jis par ye run karte hain.
  • Ranges library (C++20) — modern, composable successor.

Concept Map

motivates

used by

used by

used by

used by

used by

used by

used by

uses

needs random-access iterators

uses predicate like

Iterator range first last half-open

Named generic tested loops

sort reorders range

find first match

transform maps elements

accumulate folds to one value

copy moves range

all_of every element true

any_of some element true

Returns last as not-found sentinel