Urw*_*ald 5 c++ algorithm visual-c++ c++20 std-ranges
我想使用std::views.
为了按顺序运行,代码如下所示:
int main() {
//pseudo-random numbers
random_device rd;
default_random_engine eng(rd());
uniform_int_distribution<int> distr(0, 100);
auto r = ranges::views::iota(0, 10);
vector<double> v(10, 1);
for_each(r.begin(), r.end(), [&](int i) {v[i] = distr(eng); });
for (auto&& i : v) cout << i << " "; cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
这很好用。我使用的是标准版本std::for_each(),而不是命名空间中的版本ranges,因为它们没有执行策略。现在是并行版本。唯一的区别:
for_each(execution::par, r.begin(), r.end(), [&](int i) {v[i] = distr(eng); });
Run Code Online (Sandbox Code Playgroud)
MSVC 报错:
error C2338: Parallel algorithms require forward iterators or stronger
Run Code Online (Sandbox Code Playgroud)
我在这里发现了类似的问题:Usingranges::view::iota inparallelalgorithm,我实现了那里提供的解决方案:
auto r = views::iota(0) | views::take(10);
vector<double> v(10, 1);
auto input_range = ranges::common_view(r);
for_each(execution::par, ranges::begin(input_range), ranges::end(input_range), [&](int i) {v[i] = distr(eng); });
for (auto&& i : v) cout << i << " "; cout << endl;
Run Code Online (Sandbox Code Playgroud)
但是,我仍然面临错误
error C2338: Parallel algorithms require forward iterators or stronger.
Run Code Online (Sandbox Code Playgroud)
有人知道这个问题是否有解决方案?