gpt4 book ai didi

c++ - 我可以在std::find_if的并行版本中使用非平凡的可迭代迭代器吗?

转载 作者:行者123 更新时间:2023-12-01 14:52:54 24 4
gpt4 key购买 nike

我有一个简单的代码,可以找到我自己的BigInt类型的任何分隔符,这些分隔符具有自己的随机访问迭代器:

  BigIntRangeIterator range(2, x);
auto i = std::find_if(std::execution::par, range.begin(), range.end()
, [&](auto y) {return x % y == 0;}
);

我的迭代器包含 std::vector,因此它不是普通可复制的。当我尝试编译此代码时,我从 std::atomic实现中得到错误:
/usr/include/c++/9/atomic:191: error: static assertion failed: std::atomic requires a trivially copyable type
191 | static_assert(__is_trivially_copyable(_Tp),
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

这是否意味着在 std::find_if函数的并行版本中只能使用平凡可复制的迭代器?

最佳答案

是的,它需要使用std::atomic来避免数据争用,而std::atomic的主要模板要求该类可以被普通复制构造。

https://en.cppreference.com/w/cpp/atomic/atomic#Primary_template

关于c++ - 我可以在std::find_if的并行版本中使用非平凡的可迭代迭代器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61303116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com