diff --git a/Functor/main.cpp b/Functor/main.cpp index f25326b..c771ff8 100644 --- a/Functor/main.cpp +++ b/Functor/main.cpp @@ -1,8 +1,39 @@ #include +#include +#include + +class join_strings_functor { +private: + std::string separator_ = " "; + +public: + join_strings_functor() = default; + join_strings_functor(std::string_view separator) : separator_(separator) {} + + std::string operator()(const std::string &left, + const std::string &right) const { + return left + separator_ + right; + } +}; int main(int argc, char *argv[]) { std::cout << "Functor" << std::endl; + std::vector names = {"Albert", "Bernd", "Cora", + "Dave", "Emil", "Frank"}; + + auto space_joined_string = + std::accumulate(std::next(names.begin()), names.end(), names.front(), + join_strings_functor()); + + std::cout << "Space-joined string: " << space_joined_string << std::endl; + + auto comma_joined_string = + std::accumulate(std::next(names.begin()), names.end(), names.front(), + join_strings_functor(", ")); + + std::cout << "Comma-joined string: " << comma_joined_string << std::endl; + return EXIT_SUCCESS; }