#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; }