C ++中的半环或幺半群是否有标准的抽象?

时间:2013-04-10 00:26:04

标签: c++ math boost monoids

boost或任何其他常见的C ++库是否提供semiringmonoid抽象(例如模板类)?

我想用这些抽象结构来表达一些算法,但到目前为止我还没有遇到任何问题。我可以写自己的,但理想情况下,这些将在我已经使用的库中,例如boost。

谢谢!

3 个答案:

答案 0 :(得分:10)

SGI STLMonoidOperation概念。例如,{strong> MonoidOperation 实现了power功能。

Boost.Graph库还定义了Monoid concept

already suggested Elements of Programming之外,您可以通过Alexander Stepanov( EoP 的作者之一)查看Notes on Programming备注是免费提供的,与 EoP 图书有一些重叠。

EoP 注释之间存在风格差异 - EoP 非常简洁,就像数学教科书一样,但注意更“非正式” - 有一些小故事等。

顺便说一下,两者都讨论了上面提到的 power 函数实现。

P.S。亚历山大·斯捷潘诺夫(Alexander Stepanov)有很多会谈:

P.P.S。 Collected Papers of Alexander A. Stepanov

答案 1 :(得分:7)

据我所知,C ++标准库没有围绕这些结构的任何抽象。然而,STL的发明者Alex Stepanov写了一本名为Elements of Programming的书,其中他写了各种有用的函数,这些函数对幺半群,组,二元运算符,一元函数等起作用。它不一定是标准,但是这可能是进一步探索的良好起点。

希望这有帮助!

答案 2 :(得分:3)

Boost.Operators提供了一种为类定义算术运算符组的便捷方法。

预定义的概念(仅限语法鸭子类型)包括环,有序环,欧几里德环或欧洲环,场和有序场。您应该能够通过从适当的运算符类组派生来为半环或monoid定义自己的类。