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.

ai (1) architekt (1) Bash (2) bitwig (2) bitwig6 (1) c++ (54) cheatsheet (1) clang-format (1) class (1) cmake (3) cmake-format (1) conan (2) constexpr if (1) cz (2) daw (2) decltype(x) (1) desktop (2) duševní zdraví (1) email (1) emoce (4) enum (1) enum class (1) functor (1) git (1) gnome (4) gnome-extension (1) helloworld (2) hranice (1) js (1) keyboard (2) linux (6) llm (1) lvalue (1) metodika řízení (2) midi (2) modern c++ (48) motivace (1) music (6) music production (1) native instruments (1) nodiscard (1) noexcept (1) operator (1) osobnost (1) osobní hranice (1) override (1) package manager (1) Perfect Forwarding (1) plugin (1) poděkování (1) polymorfism (1) prospěch (1) psyché (2) python (2) rspamd (1) rvalue (1) růst (2) scale (2) self-stress (1) sociální sítě (1) software (1) spam (1) std (28) std::accumulate (1) std::async (2) std::divides (1) std::filesystem::path (2) std::forward (1) std::future (3) std::istream_iterator (1) std::latch (1) std::lerp (1) std::minus (1) std::modulus (1) std::multiplies (1) std::negate (1) std::ostream_iterator (1) std::packaged_task (1) std::partition (1) std::partition_copy (1) std::plus (1) std::promise (2) std::shiftleft (1) std::shuffle (1) std::transform (1) std::tuple (1) std::variant (1) std::views::transform (1) std::visit (1) strach (1) strategie (1) synthesizer (1) toxic (2) toxicita (1) toxík (1) using (2) vztah k sobě (1) vztahy (3) vývoj (1) zdraví (2)