Ranges算法与STD算法的差异 [英] Difference between Ranges algorithms and std algorithms

查看:11
本文介绍了Ranges算法与STD算法的差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

许多标准库算法在C++20中有两个版本:一个在std名称空间中,另一个在std::ranges名称空间中。例如,std::ranges::countstd::count都用于计算满足谓词的元素的数量。

为什么这些算法有两个版本?

推荐答案

Ranges功能将C++20概念添加到迭代器和范围中,并将其算法等的定义限制为这些概念。但是,C++20概念具有不同于C++17命名需求的需求。通常,满足C++17要求的类型将满足C++20概念等价物but not in all cases1。虽然更新自己的代码以使其对C++20概念有效通常很容易,但如果用户编写的迭代器只是停止在C++20中编译,这仍然会破坏向后兼容性。

因此,他们没有将受约束的算法强加给用户,而是创建了新的算法,您可以选择使用这些算法。因此,不会出现代码中断。

1:此外,由于C++17的需求实际上从未经过任何检查,因此很容易意外地编写一个没有完全实现其需求的迭代器。您使用的算法可能不会实际使用您没有实现的功能,从而给人一种您实现了所需功能的外观。如果您没有针对多个标准库实现测试代码,情况尤其如此。如果C++20开始检查您的迭代器,它会突然中断您在技术上损坏但功能正常的代码。

这篇关于Ranges算法与STD算法的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆