#include #include #include #include #include using It = std::vector::const_iterator; void task(It begin, It end, std::promise promise) { promise.set_value(std::reduce(begin, end)); } int sum(std::size_t thread_count, std::vector const& values) { std::size_t const size { values.size() / thread_count }; std::vector pool { }; std::vector> futures { }; for (std::size_t i { 0 }; i < thread_count; ++i) { auto begin { values.begin() + size * i }; auto end { values.begin() + size * (i + 1) }; std::promise promise { }; futures.push_back(std::move(promise.get_future())); pool.emplace_back(task, begin, end, std::move(promise)); } return std::accumulate(futures.begin(), futures.end(), 0, [](int result, std::future& future) { return result + future.get(); }); } int main() { std::vector v(1000000, 1); int answer { sum(20000, v) }; std::cout << answer << std::endl; }