Funkční objekty v C++: std::plus, std::minus, std::multiplies, std::divides, std::modulus a std::negate
C++ je jazyk, který nabízí širokou škálu nástrojů pro práci s daty a operacemi. Jedním z těchto nástrojů jsou funkční objekty (funktory), které jsou součástí standardní knihovny. Mezi nejčastěji používané funktory patří std::plus, std::minus, std::multiplies, std::divides, std::modulus a std::negate. Tyto funktory poskytují jednoduchý a elegantní způsob, jak provádět základní aritmetické operace. V tomto článku si je podrobněji představíme.
Co jsou funkční objekty?
Funkční objekt je objekt, který se chová jako funkce. V C++ je to třída nebo struktura, která přetěžuje operátor volání funkcí operator(). Standardní knihovna C++ poskytuje několik předdefinovaných funkčních objektů, které usnadňují práci s běžnými operacemi, jako je sčítání, odčítání, násobení, dělení a další.
Přehled základních aritmetických funktorů
1. std::plus
std::plus je funktor, který provádí sčítání dvou hodnot. Jeho použití je jednoduché a přehledné.
#include <functional>
#include <iostream>
int main() {
std::plus<int> add;
int result = add(10, 20); // 10 + 20 = 30
std::cout << "Výsledek sčítání: " << result << std::endl;
return 0;
}
2. std::minus
std::minus provádí odčítání dvou hodnot.
#include <functional>
#include <iostream>
int main() {
std::minus<int> subtract;
int result = subtract(20, 10); // 20 - 10 = 10
std::cout << "Výsledek odčítání: " << result << std::endl;
return 0;
}
3. std::multiplies
std::multiplies slouží k násobení dvou hodnot.
#include <functional>
#include <iostream>
int main() {
std::multiplies<int> multiply;
int result = multiply(5, 4); // 5 * 4 = 20
std::cout << "Výsledek násobení: " << result << std::endl;
return 0;
}
4. std::divides
std::divides provádí dělení dvou hodnot.
#include <functional>
#include <iostream>
int main() {
std::divides<int> divide;
int result = divide(20, 4); // 20 / 4 = 5
std::cout << "Výsledek dělení: " << result << std::endl;
return 0;
}
5. std::modulus
std::modulus vrací zbytek po celočíselném dělení.
#include <functional>
#include <iostream>
int main() {
std::modulus<int> mod;
int result = mod(10, 3); // 10 % 3 = 1
std::cout << "Zbytek po dělení: " << result << std::endl;
return 0;
}
6. std::negate
std::negate vrací negovanou hodnotu.
#include <functional>
#include <iostream>
int main() {
std::negate<int> negate;
int result = negate(10); // -10
std::cout << "Negovaná hodnota: " << result << std::endl;
return 0;
}
Využití v algoritmech
Tyto funktory se často používají v kombinaci s algoritmy ze standardní knihovny, jako jsou std::transform nebo std::accumulate. Například:
#include <functional>
#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
int sum = std::accumulate(numbers.begin(), numbers.end(), 0, std::plus<int>());
std::cout << "Součet prvků: " << sum << std::endl;
return 0;
}
Závěr
Funkční objekty jako std::plus, std::minus, std::multiplies, std::divides, std::modulus a std::negate jsou užitečnými nástroji pro práci s aritmetickými operacemi v C++. Díky nim je kód čitelnější a snadněji udržovatelný. Pokud pracujete s algoritmy nebo potřebujete provádět opakované operace, tyto funktory vám mohou výrazně usnadnit práci.