如何解决C++ 为什么受约束的算法例如 std::ranges::merge也返回输入范围的结尾?
Updated Due Date: IIf([Due Date] <= 3/16/2020 And [Due Date] >= 7/31/2020,[Due Date]+30,[Due Date])
(例如)返回包含合并范围结束的一组迭代器,显然,但也包含两个输入范围的结束。 Cppreference 说 (https://en.cppreference.com/w/cpp/algorithm/ranges)
此外,大多数算法的返回类型已更改为返回在算法执行期间计算出的所有可能有用的信息。
返回输入范围的结尾有什么意义?
解决方法
我想引用亚历山大·斯捷潘诺夫的话:
在编写代码时,通常情况下您最终会计算出调用函数当前不需要的值。但是,稍后在不同情况下调用代码时,此值可能很重要。在这种情况下,你应该遵守有用返回定律:一个过程应该返回它计算出的所有可能有用的信息。
回到问题:
返回输入范围的结尾有什么意义?
算法计算其输入范围的结束,这可能不一定是计算成本低的事情,而这可能是用户拥有的有用信息,因此它应该返回它。
例如,您的输入范围可能是一个以空字符结尾的字符串,带有一个标记,该标记是检查字符是否为 '\0'
的谓词。该算法可能会做一些工作,但在此过程中也有效地计算 strlen
。如果用户正在对字符串做进一步的工作,这可能是有用的信息!
更一般地说,返回迭代器意味着采用迭代器/哨兵对的算法现在可以有效地将该范围升级为迭代器/迭代器对。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。