diff options
Diffstat (limited to 'list.cpp')
-rw-r--r-- | list.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
@@ -4,8 +4,8 @@ */ #include <cstdio> -#include <iostream> #include <cstdlib> +#include <iostream> template <typename T> struct List @@ -64,7 +64,7 @@ void map(List<T> *lst, U (*f)(T)) } template <typename T> -T reduce(List<T> *lst, T (*reducer) (T, T), T init = 0) +T reduce(List<T> *lst, T (*reducer)(T, T), T init = 0) { if (!lst) return init; @@ -86,7 +86,7 @@ List<T> *filter(List<T> *lst, bool (*f)(T), List<T> *new_lst = nullptr) } template <typename T> -std::ostream& operator<<(std::ostream& ostream, const List<T> *lst) +std::ostream &operator<<(std::ostream &ostream, const List<T> *lst) { if (!lst) return ostream; @@ -107,15 +107,26 @@ int main(void) std::cout << lst << std::endl; puts("Reverse list again..."); printf("Map list with f(x) = 2x: "); - map<int, int>(lst = reverse(lst), [](int x){ return x * 2; }); + map<int, int>(lst = reverse(lst), [](int x) { + return x * 2; + }); std::cout << lst << std::endl; puts("Reverse map..."); - map<int, int>(lst, [](int x){ return x / 2; }); + map<int, int>(lst, [](int x) { + return x / 2; + }); printf("Sum all numbers in list: "); - std::cout << reduce<int>(lst, [](int a, int b) { return a + b; }, 0) + std::cout << reduce<int>( + lst, + [](int a, int b) { + return a + b; + }, + 0) << std::endl; printf("Print all even numbers 1..10: "); - auto evens = filter<int>(lst, [](int a) { return a % 2 == 0; }); + auto evens = filter<int>(lst, [](int a) { + return a % 2 == 0; + }); std::cout << evens << std::endl; delete lst; delete evens; |