c++ - 使用执行策略访问 for_each 函数对象中的迭代器
问题描述
有什么方法可以访问迭代器,以便std::for_each()
从算法头中找到我们正在处理的元素的索引?这在需要执行策略的情况下可能很有用。在使用执行策略
的第二个示例中考虑以下示例(为简单起见删除了互斥锁和 ..),无法在未定义行为的痛苦中使用。那么有没有办法访问迭代器并找到索引而不必将索引与 vec2 元素配对?
还在寻找适用于所有容器的通用解决方案?std::for_each()
std::par_unseq
i++
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::vector 具有连续的内存,因此您可以使用指针(并计算它们的差异)。
话虽如此,我不了解您最初的问题或动机,因此您可能需要考虑使用更多详细信息重新创建此问题或对其进行编辑。
推荐阅读
- python - python语音识别器recognize_ibm已弃用,替代方案?
- ios - 没有viewController的tabBarItem中的按钮?
- python-3.x - 只有在两次之间才将熊猫系列设置为等于特定值
- java - 我是 Java 新手。如何更正此代码?
- reactjs - 使用本机测试库难以找到元素
- javascript - 如何在没有javascript方法的字符串中搜索给定的字符串?
- node.js - 使用 Azure Functions 在 nodejs 中使用messaging_type 和标签的主动消息、botbuilder 到 FB messenger
- java - Sonarqube 扫描仪和 Maven Tycho:DefaultProjectArtifactsCache$CacheKey 处出现 NullPointerException。
- r - R - RStudio 使用带有 `mutate_at()` 的自定义可迭代函数时
- linux - 在 Linux 机器上读取 SQL MDF 文件