boost或任何其他常见的C ++库是否提供semiring或monoid抽象(例如模板类)?
我想用这些抽象结构来表达一些算法,但到目前为止我还没有遇到任何问题。我可以写自己的,但理想情况下,这些将在我已经使用的库中,例如boost。
谢谢!
答案 0 :(得分:10)
SGI STL有MonoidOperation概念。例如,{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)有很多会谈:
答案 1 :(得分:7)
据我所知,C ++标准库没有围绕这些结构的任何抽象。然而,STL的发明者Alex Stepanov写了一本名为Elements of Programming的书,其中他写了各种有用的函数,这些函数对幺半群,组,二元运算符,一元函数等起作用。它不一定是标准,但是这可能是进一步探索的良好起点。
希望这有帮助!
答案 2 :(得分:3)
Boost.Operators提供了一种为类定义算术运算符组的便捷方法。
预定义的概念(仅限语法鸭子类型)包括环,有序环,欧几里德环或欧洲环,场和有序场。您应该能够通过从适当的运算符类组派生来为半环或monoid定义自己的类。