作者:UJXo小妖春日望美 | 来源:互联网 | 2024-10-17 10:05
Stack Overflow上的许多网站和问题都 引用了一个名为. 这个函数和 有什么区别? std::__gcd
std::gcd
回答
我对此做了一些调查。看起来该__gcd
函数是在
标头(第 1503 行)的 libstdc++ 实现中定义的私有辅助函数。它仅由std::rotate
函数内部使用(第 1610 行)。它(可能)从未打算直接在库实现之外使用。因为它特定于 libstdc++,所以不能保证通过 g++ 以外的编译器尝试使用此函数。从这个意义上说,您可以将该std::__gcd
函数视为(文档不足的)内部帮助程序,该帮助程序仅适用于某些 C++ 编译器。
(有趣的事实:我首先__gcd
被一个现已删除的问题提醒到这里的存在,该问题询问为什么它不一致地处理负输入。结果它并不是真正设计用于处理负数,因为 libstdc++ 实现仅在以下情况下使用它输入是非负的。这是使用未记录的内部帮助函数的风险之一!)
另一方面,std::gcd
是在 C++17 中引入的标准 C++ 库函数。这意味着任何符合 C++17 的编译器都将支持std::gcd
,因此如果您有符合 C++17 的编译器,最好使用此选项。
对于 C++14 或更低版本,您可以简单地实现自己的版本 GCD 功能。Euclid 的算法编码非常简单,运行速度非常快。