Ce face std::adjacent_find
std::adjacent_find compară fiecare element cu următorul și returnează un iterator către primul element dintr-o pereche de vecini egali. Cu un predicat poți căuta orice relație între vecini, de exemplu o scădere.
Într-un vector sortat, două valori vecine egale înseamnă duplicate, deci funcția este o metodă rapidă de a verifica dacă există dubluri.
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Intervalul. |
conditie |
Opțional. Funcție bool(a, b) aplicată perechilor de vecini. |
Ce returnează
Iterator către primul element al perechii, sau last.
Exemple
Exemplul 1: Litere dublate
#include <algorithm>
#include <print>
#include <string>
int main() {
std::string cuvant = "alee";
auto it = std::adjacent_find(cuvant.begin(), cuvant.end());
std::println("Prima literă dublată: '{}' la poziția {}", *it, it - cuvant.begin());
}
Rezultat
Prima literă dublată: 'e' la poziția 2
Exemplul 2: Prima zi în care prețul a scăzut
#include <algorithm>
#include <functional>
#include <print>
#include <vector>
int main() {
std::vector<int> pret{100, 104, 110, 107, 112};
auto it = std::adjacent_find(pret.begin(), pret.end(), std::greater<>());
std::println("Scădere după ziua {}: {} -> {}", it - pret.begin() + 1, *it, *(it + 1));
}
Rezultat
Scădere după ziua 3: 110 -> 107
Greșeli frecvente
- Cauți duplicate cu
adjacent_findîntr-un vector nesortat. Găsește doar duplicate aflate unul lângă altul.
Comenzi înrudite
std::unique: Elimină duplicatele aflate unul lângă altul; după sortare, elimină toate duplicatele.std::find: Caută prima apariție a unei valori într-un interval și returnează un iterator către ea.std::is_sorted: Verifică dacă elementele unui interval sunt deja în ordine crescătoare (sau după regula dată).