Difference between Ranges algorithms and std algorithms(Ranges算法与STD算法的差异)
问题描述
许多标准库算法在C++20中有两个版本:一个在std名称空间中,另一个在std::ranges名称空间中。例如,std::ranges::count和std::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算法的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Ranges算法与STD算法的差异
基础教程推荐
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 这个宏可以转换成函数吗? 2022-01-01
- 常量变量在标题中不起作用 2021-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
