C++为什么受约束的算法(例如std::ranges::merge)也返回输入范围的末尾



std::ranges::merge(例如(返回一束迭代器,其中显然包含合并范围的末尾,但也包含两个输入范围的末尾。Cppreference说(https://en.cppreference.com/w/cpp/algorithm/ranges)

此外,大多数算法的返回类型都已更改,以返回在算法执行期间计算的所有潜在有用信息。

返回输入范围的末尾有什么意义?

我想引用亚历山大·斯捷潘诺夫的话:

在编写代码时,通常情况下,您最终会计算出调用函数当前不需要的值。但是,稍后在不同的情况下调用代码时,这个值可能很重要。在这种情况下,您应该遵守有用返回定律:过程应该返回它计算的所有潜在有用信息。

返回问题:

返回输入范围的末尾有什么意义?

算法计算了其输入范围的末尾,这可能不一定是一个便宜的计算方法,而且这可能是用户拥有的有用信息,所以它应该只返回它。

例如,您的输入范围可能是一个以null结尾的字符串,其中sentinel是一个谓词,用于检查字符是否为''。该算法可能会做一些工作,但在这个过程中也能有效地计算strlen。如果用户正在对字符串进行进一步的处理,那么这可能是有用的信息!

更一般地说,返回一个Iterator意味着采用Iterator/Stinel对的算法现在可以有效地将该范围升级为Iterator/Iterator对。

相关内容

  • 没有找到相关文章

最新更新