std::adjacent_find în C++

Găsește prima pereche de elemente vecine egale (sau care îndeplinesc o condiție între ele).

Sintaxă
ForwardIt adjacent_find(ForwardIt first, ForwardIt last);
ForwardIt adjacent_find(ForwardIt first, ForwardIt last, BinaryPred conditie);

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ă).