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算法的差异
基础教程推荐
- GDB 显示调用堆栈上函数地址的当前编译二进制文 2022-09-05
- 如果我为无符号变量分配负值会发生什么? 2022-01-01
- 初始化列表*参数*评估顺序 2021-01-01
- 为什么派生模板类不能访问基模板类的标识符? 2021-01-01
- 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如 2022-09-16
- 为什么 RegOpenKeyEx() 在 Vista 64 位上返回错误代码 2021-01-01
- 通过引用传递 C++ 迭代器有什么问题? 2022-01-01
- 我应该对 C++ 中的成员变量和函数参数使用相同的名称吗? 2021-01-01
- CString 到 char* 2021-01-01
- 非静态 const 成员,不能使用默认赋值运算符 2022-10-09
