std::ranges::merge
(例如(返回一束迭代器,其中显然包含合并范围的末尾,但也包含两个输入范围的末尾。Cppreference说(https://en.cppreference.com/w/cpp/algorithm/ranges)
此外,大多数算法的返回类型都已更改,以返回在算法执行期间计算的所有潜在有用信息。
返回输入范围的末尾有什么意义?
我想引用亚历山大·斯捷潘诺夫的话:
在编写代码时,通常情况下,您最终会计算出调用函数当前不需要的值。但是,稍后在不同的情况下调用代码时,这个值可能很重要。在这种情况下,您应该遵守有用返回定律:过程应该返回它计算的所有潜在有用信息。
返回问题:
返回输入范围的末尾有什么意义?
算法计算了其输入范围的末尾,这可能不一定是一个便宜的计算方法,而且这可能是用户拥有的有用信息,所以它应该只返回它。
例如,您的输入范围可能是一个以null结尾的字符串,其中sentinel是一个谓词,用于检查字符是否为' '
。该算法可能会做一些工作,但在这个过程中也能有效地计算strlen
。如果用户正在对字符串进行进一步的处理,那么这可能是有用的信息!
更一般地说,返回一个Iterator意味着采用Iterator/Stinel对的算法现在可以有效地将该范围升级为Iterator/Iterator对。