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

关于单遍范围(single-pass range)的begin()方法需满足摊销常数时间要求的合理性问询

关于单遍范围(single-pass range)的begin()方法需满足摊销常数时间要求的合理性问询

我最近在研究std::ranges::range的语义要求时,看到了这样的规定:

语义要求
给定表达式E,若decltype((E))为类型T,那么T要符合range概念,必须满足以下条件:

  • ...
  • ranges::begin(E)和ranges::end(E)都属于摊销常数时间操作,并且不会以对保等表达式可观察的方式改变E的值。

不过这里我有个疑问:对于单遍范围(single-pass range)而言,要求ranges::begin(E)是摊销常数时间真的合理吗?毕竟这类范围的E.begin()方法实际上可能会包含类似E.get_next_value()的调用——这意味着每次调用begin()都可能消耗掉范围中的元素,而且时间复杂度也未必能保证是摊销常数级的。

备注:内容来源于stack exchange,提问作者Pavel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:48:17