Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c++ how to elegantly use c++17 parallel execution with for loop that counts an integer?

I can do

std::vector<int> a;
a.reserve(1000);
for(int i=0; i<1000; i++)
    a.push_back(i);
std::for_each(std::execution::par_unseq, std::begin(a), std::end(a), [&](int i) {
  ... do something based on i ...
});

but is there a more elegant way of creating a parallelized version of for(int i=0; i<n; i++) that does not require me to first fill a vector with ascending ints?

like image 591
matthias_buehlmann Avatar asked Aug 10 '20 12:08

matthias_buehlmann


1 Answers

You could use std::generate to create a vector {0, 1, ..., 999}

std::vector<int> v(1000);
std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });

There is an overload that accepts an ExecutionPolicy so you could modify the above to

std::vector<int> v(1000);
std::generate(std::execution::par, v.begin(), v.end(), [n = 0] () mutable { return n++; });
like image 62
Cory Kramer Avatar answered Nov 10 '22 00:11

Cory Kramer