std::find if (tsz. std::find ifs)
std::find_if
egy C++ algoritmus az <algorithm>
fejlécben, amely egy adott tartományban keres egy olyan elemet, amely megfelel egy adott feltételnek.
std::find_if
szintaxisatemplate<class InputIterator, class UnaryPredicate>
InputIterator find_if(InputIterator first, InputIterator last, UnaryPredicate pred);
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 (true
vagy false
).
pred
igaz (true
).last
iterátorral tér vissza.
A std::find_if
akkor hasznos, ha nem konkrét értéket keresünk, hanem egy bizonyos feltételnek megfelelő elemet.
#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;
}
Az első páros szám: 8
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.
#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 == '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;
}
Az első 'A' betűvel kezdődő név: Anna
#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;
}
Az első páros szám: 6
#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;
}
Az első negatív szám: -3
std::find_if
egy hatékony algoritmus a kereséshez, ha nem konkrét értéket, hanem egy adott feltételnek megfelelő elemet keresünk.