From 7f67471e7b5a1aee83b032e2ac8e09ea1dfac097 Mon Sep 17 00:00:00 2001 From: neingeist Date: Sun, 13 Apr 2014 10:03:09 +0200 Subject: [PATCH] add accumulate example --- .gitignore | 1 + CMakeLists.txt | 1 + accumulate.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 accumulate.cpp diff --git a/.gitignore b/.gitignore index 9cc68db..1c58de3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ typetest unique_ptr list-initializers array-bounds +accumulate diff --git a/CMakeLists.txt b/CMakeLists.txt index 817877e..9b97923 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,3 +8,4 @@ add_executable(auto_ptr auto_ptr.cpp) add_executable(unique_ptr unique_ptr.cpp) add_executable(list-initializers list-initializers.cpp) add_executable(array-bounds array-bounds.cpp) +add_executable(accumulate accumulate.cpp) diff --git a/accumulate.cpp b/accumulate.cpp new file mode 100644 index 0000000..95062a2 --- /dev/null +++ b/accumulate.cpp @@ -0,0 +1,45 @@ +// http://www.cplusplus.com/reference/numeric/accumulate/ + +#include +#include + +#include // std::minus +#include // std::accumulate + +int myfunction (int x, int y) { return x+2*y; } + +struct myclass { + int operator()(int x, int y) { return x+3*y; } +} myobject; + +int main() { + int init = 100; + int numbers[] = {10,20,30}; + int res; + + std::cout << "using default accumulate: "; + res = std::accumulate(numbers, numbers+3, init); + std::cout << res; + assert(res == 100+10+20+30); + std::cout << '\n'; + + std::cout << "using functional's minus: "; + res = std::accumulate(numbers, numbers+3, init, std::minus()); + std::cout << res; + assert(res == 100-10-20-30); + std::cout << '\n'; + + std::cout << "using custom function: "; + res = std::accumulate(numbers, numbers+3, init, myfunction); + std::cout << res; + assert(res == 100+20+40+60); + std::cout << '\n'; + + std::cout << "using custom object: "; + res = std::accumulate(numbers, numbers+3, init, myobject); + std::cout << res; + assert(res == 100+30+60+90); + std::cout << '\n'; + + return 0; +}