Реализовать кольцевой буфер в виде stl-совместимого контейнера (например, может быть использован с стандартными алгоритмами), обеспеченного итератором произвольного доступа. Реализация не должна использовать ни одни из контейнеров STL. Буфер должен обладать следующими возможностями:
- Вставка и удаление в конец
- Вставка и удаление в начало
- Доступ в конец, начало
- Доступ по индексу
- Изменение капасити
Требуется реализовать следующие обобщенные алгоритмы.
all_of
- возвращаетtrue
, если все элементы диапазона удовлетворяют некоторому предикату. Иначеfalse
.any_of
- возвращаетtrue
, если хотя бы один из элементов диапазона удовлетворяет некоторому предикату. Иначеfalse
.none_of
- возвращаетtrue
, если все элементы диапазона не удовлетворяют некоторому предикату. Иначеfalse
.one_of
- возвращает true, если ровно один элемент диапазона удовлетворяет некоторому предикату. Иначеfalse
.is_sorted
- возвращаетtrue
, если все элементы диапазона находятся в отсортированном порядке относительно некоторого критерия.is_partitioned
- возвращаетtrue
, если в диапазоне есть элемент, делящий все элементы на удовлетворяющие и не удовлетворяющие некоторому предикату. Иначеfalse
.find_not
- находит первый элемент, не равный заданномуfind_backward
- находит первый элемент, равный заданному, с концаis_palindrome
- возвращаетtrue
, если заданная последовательность является палиндромом относительно некоторого условия. Иначеfalse
.
Каждый алгоритм должен быть выполнен в виде шаблонной функции, позволяющей взаимодействовать со стандартными контейнерами STL с помощью итераторов. Предикаты, условия, операторы сравнения должны быть параметризованы.
При сдаче работы требуется продемонстрировать работу алгоритмов как на стандартных, так и на пользовательских типах данных, например CPoint
, CRational
, далее работает ваша индивидуальная (не “коллективная”) фантазия.