关于单遍范围(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
相关产品推荐
相关产品推荐

