Ce face std::equal
std::equal compară element cu element. Varianta cu trei iteratori presupune că al doilea interval are cel puțin aceeași lungime ca primul și nu verifică dacă este mai lung. Varianta cu patru iteratori (C++14) compară și lungimile, deci este mai sigură.
Pentru două containere de același tip poți folosi direct a == b. std::equal este util pentru containere diferite (vector cu listă), părți din containere sau comparații cu un predicat.
Parametri
| Parametru | Descriere |
|---|---|
first1, last1 |
Primul interval. |
first2, last2 |
Al doilea interval (last2 este opțional). |
egal |
Opțional. Predicat de comparare. |
Ce returnează
true dacă intervalele sunt egale.
Exemple
Exemplul 1: Palindrom fără copiere
Primul interval este textul de la început, al doilea textul citit de la coadă cu rbegin().
#include <algorithm>
#include <print>
#include <string>
int main() {
for (std::string cuvant : {"rotor", "radar", "rama"}) {
bool palindrom = std::equal(cuvant.begin(), cuvant.end(), cuvant.rbegin());
std::println("{}: {}", cuvant, palindrom);
}
}
Rezultat
rotor: true
radar: true
rama: false
Exemplul 2: Vector și listă
#include <algorithm>
#include <list>
#include <print>
#include <vector>
int main() {
std::vector<int> asteptat{1, 2, 3};
std::list<int> primit{1, 2, 3, 4};
std::println("3 iteratori: {}", std::equal(asteptat.begin(), asteptat.end(), primit.begin()));
std::println("4 iteratori: {}", std::equal(asteptat.begin(), asteptat.end(), primit.begin(), primit.end()));
std::println("ranges: {}", std::ranges::equal(asteptat, primit));
}
Rezultat
3 iteratori: true
4 iteratori: false
ranges: false
Greșeli frecvente
- Folosești varianta cu 3 iteratori când al doilea interval este mai scurt: citire în afara lui, comportament nedefinit. Preferă varianta cu 4 iteratori sau
std::ranges::equal.
Comenzi înrudite
std::mismatch: Găsește prima poziție unde două intervale diferă și returnează iteratorii din ambele.std::is_permutation: Verifică dacă două intervale conțin aceleași elemente, de același număr de ori, în orice ordine.std::lexicographical_compare: Compară două intervale ca în dicționar și spune dacă primul vine înaintea celui de-al doilea.std::search: Caută prima apariție a unei secvențe de elemente în interiorul altui interval.