std::find if
Megjelenés
Főnév
std::find if (tsz. std::find ifs)
- (informatika) A
std::find_ifegy C++ algoritmus az<algorithm>fejlécben, amely egy adott tartományban keres egy olyan elemet, amely megfelel egy adott feltételnek.
std::find_if szintaxisa
template<class InputIterator, class UnaryPredicate>
InputIterator find_if(InputIterator first, InputIterator last, UnaryPredicate pred);
Paraméterek:
first,last– Az iterátorok, amelyek a keresési tartomány elejét és végét jelölik.pred– Egy egyszemélyes (unáris) predikátum, amely logikai értéket ad vissza (truevagyfalse).
Visszatérési érték:
- Az első olyan elem iterátora, amelyre a
predigaz (true). - Ha nincs ilyen elem, akkor
lastiterátorral tér vissza.
Használata
A std::find_if akkor hasznos, ha nem konkrét értéket keresünk, hanem egy bizonyos feltételnek megfelelő elemet.
Egyszerű példa: páros szám keresése
#include <iostream>
#include <vector>
#include <algorithm>
bool is_even(int n) {
return n % 2 == 0;
}
int main() {
std::vector<int> numbers = {1, 3, 7, 8, 5, 9};
auto it = std::find_if(numbers.begin(), numbers.end(), is_even);
if (it != numbers.end()) {
std::cout << "Az első páros szám: " << *it << std::endl;
} else {
std::cout << "Nincs páros szám a vektorban." << std::endl;
}
return 0;
}
Eredmény
Az első páros szám: 8
Lambdával rövidebb és tisztább kód
A C++11 óta lambdákat is használhatunk a predikátum megadására:
auto it = std::find_if(numbers.begin(), numbers.end(), [](int n) {
return n % 2 == 0;
});
Ez ugyanazt csinálja, mint a is_even függvény, de nem kell külön függvényt definiálni.
Gyakorlati példák
1. Sztring keresése bizonyos kezdőbetűvel
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
int main() {
std::vector<std::string> names = {"Anna", "Béla", "Cili", "András"};
auto it = std::find_if(names.begin(), names.end(), [](const std::string& name) {
return name[0] == 'A';
});
if (it != names.end()) {
std::cout << "Az első 'A' betűvel kezdődő név: " << *it << std::endl;
} else {
std::cout << "Nincs 'A' betűvel kezdődő név." << std::endl;
}
return 0;
}
Eredmény
Az első 'A' betűvel kezdődő név: Anna
2. Páros szám keresése listában
#include <iostream>
#include <list>
#include <algorithm>
int main() {
std::list<int> numbers = {5, 3, 9, 6, 11};
auto it = std::find_if(numbers.begin(), numbers.end(), [](int n) {
return n % 2 == 0;
});
if (it != numbers.end()) {
std::cout << "Az első páros szám: " << *it << std::endl;
} else {
std::cout << "Nincs páros szám a listában." << std::endl;
}
return 0;
}
Eredmény
Az első páros szám: 6
3. Negatív szám keresése tömbben
#include <iostream>
#include <algorithm>
int main() {
int arr[] = {4, 2, 7, -3, 10};
auto it = std::find_if(std::begin(arr), std::end(arr), [](int n) {
return n < 0;
});
if (it != std::end(arr)) {
std::cout << "Az első negatív szám: " << *it << std::endl;
} else {
std::cout << "Nincs negatív szám a tömbben." << std::endl;
}
return 0;
}
Eredmény
Az első negatív szám: -3
Összegzés
std::find_ifegy hatékony algoritmus a kereséshez, ha nem konkrét értéket, hanem egy adott feltételnek megfelelő elemet keresünk.- Iterátorokkal működik, így használható vektorokkal, listákkal, tömbökkel stb.
- Lambdákkal kombinálva nagyon rövid és olvasható kódot írhatunk.
- std::find if - Szótár.net (en-hu)
- std::find if - Sztaki (en-hu)
- std::find if - Merriam–Webster
- std::find if - Cambridge
- std::find if - WordNet
- std::find if - Яндекс (en-ru)
- std::find if - Google (en-hu)
- std::find if - Wikidata
- std::find if - Wikipédia (angol)