Ce face std::search
std::search este echivalentul lui string::find pentru orice fel de date: găsește unde începe pentru prima dată subsecvența [s_first, s_last) în [first, last).
Dacă secvența nu apare, returnează last. Poate primi și un predicat de comparare, de exemplu pentru căutare fără să țină cont de majuscule.
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Intervalul în care se caută. |
s_first, s_last |
Secvența căutată. |
Ce returnează
Iterator către începutul primei potriviri, sau last.
Exemple
Exemplul 1: O secvență de numere
#include <algorithm>
#include <print>
#include <vector>
int main() {
std::vector<int> semnal{0, 1, 1, 0, 1, 0, 0, 1};
std::vector<int> model{1, 0, 0};
auto it = std::search(semnal.begin(), semnal.end(), model.begin(), model.end());
if (it != semnal.end()) {
std::println("Modelul începe la poziția {}", it - semnal.begin());
}
}
Rezultat
Modelul începe la poziția 4
Exemplul 2: Căutare fără majuscule
Al cincilea argument compară caracterele după transformarea în litere mici.
#include <algorithm>
#include <cctype>
#include <print>
#include <string>
int main() {
std::string text = "Bine ai venit la DexBlog!";
std::string cautat = "dexblog";
auto it = std::search(text.begin(), text.end(), cautat.begin(), cautat.end(),
[](unsigned char a, unsigned char b) { return std::tolower(a) == std::tolower(b); });
std::println("Găsit la poziția {}", it - text.begin());
}
Rezultat
Găsit la poziția 17
Greșeli frecvente
- Folosești
std::searchpestd::stringpentru o căutare simplă. Metodatext.find("...")este mai scurtă și returnează direct poziția.
Comenzi înrudite
std::find: Caută prima apariție a unei valori într-un interval și returnează un iterator către ea.std::mismatch: Găsește prima poziție unde două intervale diferă și returnează iteratorii din ambele.std::equal: Verifică dacă două intervale conțin aceleași elemente, în aceeași ordine.std::adjacent_find: Găsește prima pereche de elemente vecine egale (sau care îndeplinesc o condiție între ele).