【发布时间】:2019-08-29 22:13:41
【问题描述】:
当使用std::for_each() 从算法头中时,有什么方法可以访问迭代器以便找到我们正在处理的元素的索引?这在需要执行策略的情况下可能很有用。
考虑在第二个std::for_each() 中使用执行策略std::par_unseq 的以下示例(为简单起见删除了互斥锁和..),i++ 不能用于未定义行为的痛苦。那么有没有办法访问迭代器并找到索引而不必将索引与 vec2 元素配对?
还在寻找适用于所有容器的通用解决方案?
vector<int> vec1{1, 4, 5, 6, 9, 0, 3, 9};
vector<int> vec2{1, 5, 2, 3};
vector<int> vec3(4), vec4(4);
size_t i = 0;
for_each(vec2.begin(), vec2.end(), [&vec1, &vec3, &i](const auto& e) {
vec3[i++] = vec1[e];
});
for_each(execution::par_unseq, vec2.begin(), vec2.end(), [&vec1, &vec4](const auto& e) {
vec4[distance(vec2.begin(), current_iterator)] = vec1[e];
});
【问题讨论】:
-
你有什么理由不使用
std::copy?
标签: c++ c++17 std c++-standard-library parallel.foreach