Обеспечивает ли boost или любую другую общую библиотеку C ++ полукольцо или же моноид абстракции (например, шаблон класса)?
У меня есть несколько алгоритмов, которые я хотел бы выразить в терминах этих абстрактных структур, но до сих пор я ничего не встречал. Я могу написать свой, но в идеале это будет в библиотеке, которую я уже использую, например, boost.
Спасибо!
SGI STL имеет MonoidOperation концепция. Например мощность функция реализована для MonoidOperation.
Boost.Graph библиотека также определяет Моноидная концепция.
В дополнение к уже предложил Элементы программирования вы можете посмотреть на Примечания по программированию Александр Степанов (один из авторов НКП).
Заметки находятся в свободном доступе и частично совпадают с НКП книга.
Есть разница в стиле между НКП а также Заметки — НКП очень кратко, как учебник математики, но Заметки более «неформальные» — есть несколько небольших историй и т. д.
Кстати, оба имеют некоторое обсуждение упомянутых выше мощность реализация функции.
Постскриптум Есть великие разговоры Александра Степанова:
Насколько мне известно, стандартная библиотека C ++ не имеет абстракций вокруг этих структур. Однако Алексей Степанов, изобретатель STL, написал книгу под названием Элементы программирования в которой он пишет множество полезных функций, которые работают с моноидами, группами, бинарными операторами, унарными функциями и т. д. Это не обязательно стандарт, но это может быть хорошей отправной точкой для дальнейшего изучения.
Надеюсь это поможет!
Boost.Operators предоставляет удобный способ определения групп арифметических операторов для класса.
Предварительно определенные понятия (только синтаксическая типизация утки) включают кольцо, упорядоченное кольцо, евклидово кольцо, упорядоченное евклидово кольцо, поле и упорядоченное поле. Вы должны быть в состоянии определить свои собственные классы для полукольца или моноида, производные от соответствующих групп классов операторов.