c++ - std::__gcd 和 std::gcd 有什么区别?

标签 c++ algorithm greatest-common-divisor

Many websitesquestions on Stack Overflow引用名为 std::__gcd 的函数。这个函数和 std::gcd 有什么区别?

最佳答案

我对此做了一些调查。它看起来像 __gcd函数是定义的私有(private)辅助函数 in the libstdc++ implementation of the <algorithm> header (line 1503) .它仅由 std::rotate 在内部使用函数(第 1610 行)。它(可能)从未打算在库实现之外直接使用。因为它特定于 libstdc++,所以不能保证通过 g++ 以外的编译器使用此函数。从这个意义上说,你可以想到 std::__gcd用作(记录不详的)内部助手,仅适用于某些 C++ 编译器。

(有趣的事实:我第一次注意到 __gcd 的存在是因为这里有一个现已删除的问题,询问它为什么不一致地处理负输入。事实证明它并不是真正设计用于处理负数,因为 libstdc++ 实现仅在输入为非负的情况下使用它。这是使用未记录的内部辅助函数的风险之一!)

另一方面,std::gcd是在 C++17 中引入的标准 C++ 库函数。这意味着任何 C++17 兼容的编译器都将支持 std::gcd , 所以如果你有一个兼容 C++17 的编译器,最好使用这个选项。

对于C++14或更低版本,你可以简单地实现你自己版本的GCD功能。欧几里得算法非常易于编写代码并且运行速度极快。

关于c++ - std::__gcd 和 std::gcd 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68772236/

相关文章:

algorithm - 最佳矩形孵化算法

c++ - 从 C 初始化 C++ 结构

xerces - Xerces-C 中的 XPath 支持

python - 不包括前导零的随机数的排列

arrays - 从数组计算最大公约数的有效方法 - Swift

algorithm - Verilog GCD 执行错误

java - 欧几里德最大公分母法实现中的死循环

c++ - V8编译器错误

c++ - 将结构指针传递给带索引与不带索引的函数

algorithm - 找到小于给定值的最大值的时间复杂度是多少?