You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++<numeric>中6类输出型算法及并行版的输入输出范围是否可重叠?

C++ 中扫描类算法的输入输出范围重叠规则

非并行版本(无执行策略参数)

  • partial_sum:明确支持原地计算,输出起始迭代器可以和输入起始完全重合。因为它按从左到右的顺序逐步计算,每个新值只依赖之前的结果,不会覆盖还没读取的输入元素。
  • adjacent_difference:同样允许原地操作,计算第i个结果只需要输入的第i和i-1个元素,顺序处理时不会破坏未读取的输入数据。
  • inclusive_scan / exclusive_scan:非并行模式下默认顺序执行,支持输入输出范围重叠(包括原地计算),逻辑和partial_sum一致,逐步计算不会提前覆盖未读取的输入。
  • transform_inclusive_scan / transform_exclusive_scan:非并行版本也支持原地计算,只要变换操作无副作用且顺序执行时不会干扰输入读取,输入输出范围可以重叠。

并行版本(带execution_policy重载)

所有上述算法的并行版本严格要求输入范围和输出范围不相交。原因很简单:并行执行时,多个线程会同时处理不同位置的元素,如果范围重叠,某个线程可能还没读取输入元素,就被另一个线程写入了该位置的输出值,直接导致数据竞争和未定义行为。C++标准里并行算法的通用规则也明确,除非算法特别说明允许,否则输入输出范围不能重叠,而这些算法的并行版本没有例外条款。

内容的提问来源于stack exchange,提问作者o_oTurtle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:40:53