#include // for std::plus and std::minus #include #include #include #include #include using namespace std; /* This program MUST be compiled with C++17 since it relies on template argument deduction. If everything is implemented correctly, this program should give the following output: vector: 1, 2.1, 2.14, 2.1405, 3.1415, vector: 5, 2, 1, 1, 0, list: du, du hast, du hast mich, deque>: (1, 1), (6, 3), (8, 8), (10, 9), (10, 10), deque: */ int main() { { vector vals { 1.0, 1.1, 0.04, 0.0005, 1.001 }; cout << "vector: "; for (auto res : fold(vals)) cout << res << ", "; cout << endl; } { vector vals { 5, 3, 1, 0, 1 }; cout << "vector: "; for (auto res : fold(vals, 10, minus{})) cout << res << ", "; cout << endl; } { list vals { "du", " hast", " mich" }; cout << "list: "; for (auto res : fold(vals)) cout << res << ", "; cout << endl; } { deque> vals { {1, 1}, {5, 2}, {2, 5}, {2, 1}, {0, 1} }; cout << "deque>: "; for (auto res : fold(vals, pair{0, 0}, [](auto a, auto b) { return pair{a.first + b.first, a.second + b.second}; } )) cout << "(" << res.first << ", " << res.second << "), "; cout << endl; } { deque vals {}; cout << "deque: "; for (auto res : fold(vals)) cout << res << ", "; cout << endl; } }