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算法的差异


- 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值 2021-01-01
- OpenGL 对象的 RAII 包装器 2021-01-01
- XML Schema 到 C++ 类 2022-01-01
- 将函数的返回值分配给引用 C++? 2022-01-01
- 哪个更快:if (bool) 或 if(int)? 2022-01-01
- 使用 __stdcall & 调用 DLLVS2013 中的 GetProcAddress() 2021-01-01
- DoEvents 等效于 C++? 2021-01-01
- GDB 不显示函数名 2022-01-01
- 如何提取 __VA_ARGS__? 2022-01-01
- 将 hdc 内容复制到位图 2022-09-04