Ce face std::find
std::find compară pe rând fiecare element cu valoarea căutată (cu ==) și se oprește la prima potrivire. Dacă nu găsește nimic, returnează last, de obicei v.end().
Funcționează pe orice container și nu are nevoie ca datele să fie sortate, dar parcurge elementele unul câte unul (O(n)). Poziția se obține cu it - v.begin() sau std::distance.
Pentru căutare după o condiție folosește std::find_if. Varianta C++20 este std::ranges::find(v, valoare).
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Intervalul în care se caută. |
valoare |
Valoarea căutată. |
Ce returnează
Iterator către primul element egal cu valoarea, sau last dacă nu există.
Exemple
Exemplul 1: Găsit sau nu
Rezultatul trebuie comparat întotdeauna cu end() înainte de a-l folosi.
#include <algorithm>
#include <print>
#include <string>
#include <vector>
int main() {
std::vector<std::string> orase{"București", "Cluj", "Iași", "Timișoara"};
auto it = std::find(orase.begin(), orase.end(), "Iași");
if (it != orase.end()) {
std::println("Iași este pe poziția {}", it - orase.begin());
}
if (std::find(orase.begin(), orase.end(), "Galați") == orase.end()) {
std::println("Galați nu este în listă");
}
}
Rezultat
Iași este pe poziția 2
Galați nu este în listă
Exemplul 2: Toate aparițiile unei valori
După fiecare potrivire, căutarea continuă de la elementul următor.
#include <algorithm>
#include <print>
#include <vector>
int main() {
std::vector<int> zaruri{3, 6, 1, 6, 2, 6};
for (auto it = std::find(zaruri.begin(), zaruri.end(), 6); it != zaruri.end();
it = std::find(it + 1, zaruri.end(), 6)) {
std::println("6 la aruncarea {}", it - zaruri.begin() + 1);
}
}
Rezultat
6 la aruncarea 2
6 la aruncarea 4
6 la aruncarea 6
Greșeli frecvente
- Folosești
*itfără să verificiit != v.end(). Dacă valoarea lipsește, dereferențierea luiend()este comportament nedefinit. - Cauți cu
std::findîntr-unstd::setsaustd::map. Merge, dar este liniar; metodafinda containerului este logaritmică.
Comenzi înrudite
std::find_if: Găsește primul element care îndeplinește o condiție (find_if) sau primul care nu o îndeplinește (find_if_not).std::ranges::find: Caută o valoare direct într-un container, opțional după un câmp al elementelor (proiecție).std::count: Numără de câte ori apare o valoare (count) sau câte elemente îndeplinesc o condiție (count_if).std::binary_search: Verifică foarte rapid dacă o valoare există într-un interval deja sortat.std::search: Caută prima apariție a unei secvențe de elemente în interiorul altui interval.