Индивидуальное задание 1.

Реализовать класс, включая конструктор по умолчанию, конструктор копии, операцию присваивания и другие перегруженные операции.

1.       Двусвязный список с двунаправленным итератором.

Функции-члены списка и внешние функции: те же, что и в варианте 1, кроме cut и divide. Функции-члены итератора списка: те же, что
и в варианте 1, а также : bol – состояние «начало списка»; operator-- – префиксный и постфиксный.

2.       Односвязный список с подсчетом ссылок.

Функции-члены и внешние функции: те же, что и в варианте 1. Отличие: в узле списка необходимо хранить не значение, а указатель на объект, содержащий значение и счетчик ссылок (в скольких списках содержится).

3.       Множество на базе списка с двунаправленным итератором.

Функции-члены множества: те же, что и в варианте 3; добавить
foreach – применение функции, передаваемой в качестве параметра,
к элементам множества. Функции-члены итератора множества: конструктор; eos – состояние «конец множества»; bos – состояние «начало множества»; operator++ – префиксный и постфиксный; operator-- – префиксный и постфиксный; operator* – ссылка на текущий элемент
во множестве.

4.       Множество на базе бинарного дерева с двунаправленным итератором.

Функции-члены множества и его итератора: те же, что и в варианте 4. При сложностях в реализации сделать операцию удаления элемента
из множества простым перебором элементов с перезаписью в другое множество.

5.       Очередь с приоритетом с подсчетом ссылок.

Элементы очереди должны иметь перегруженный operator<, сравнивающий приоритеты. При вставке элемента в конец очереди он продвигается вперед до элемента с более высоким приоритетом. Элементы могут находиться в нескольких очередях, поэтому должны иметь счетчик очередей, в которых стоят. В очереди необходимо хранить не сами элементы,
а указатели на них.

Функции-члены очереди: конструктор по умолчанию; деструктор; конструктор копии; operator=; пуста ли очередь; количество объектов
в очереди; operator<< и operator+= – добавление элемента в очередь;
operator>> – взятие элемента из начала очереди; operator+= – добавление очереди к очереди.

Внешние функции: operator==; operator!=; operator+ – слияние очередей; operator<< – вывод в поток; operator>> – ввод
из потока (признак конца ввода – ввод некоторого значения).

6.       Матрица и вектор.

Функции-члены вектора: конструктор; деструктор; конструктор копии; operator =; возвращение размера; operator[]; унарные операции operator+, operator-; все возможные комбинации operator+=,
operator-=, operator*= – и т. д.; operator() с двумя параметрами для выделения подвектора.

Функции-члены матрицы: конструктор; деструктор; конструктор копии; operator=; конструктор с одним параметром, преобразующий число c в матрицу cE; возвращение размеров; operator[] – возвращение строки матрицы в виде вектора; operator+, operator- – бинарные (с контролем размерности); operator* – умножение матрицы на вектор (с контролем размерности); operator+=, operator-=; operator*= – все возможные комбинации; operator() с четырьмя параметрами для выделения подматрицы; swap(i,j) – перестановка двух строк.

Внешние функции: транспонирование матрицы; вычисление определителя матрицы; operator==, operator!= для матрицы и вектора;
operator+, operator- – бинарные (с контролем размерности) для матрицы и вектора; operator* – умножение вектора на число; operator* – умножение матрицы на число; operator* – скалярное произведение векторов; operator* – умножение матрицы на матрицу (с контролем размерности); operator<< – вывод в поток для матрицы и вектора.

7.       Разреженный массив на базе списка.

Функции-члены массива: конструктор; деструктор; конструктор копии; operator=; унарные операции operator+, operator-;
operator* – умножение каждого элемента на число; operator+=,
operator-=, operator*= – все возможные комбинации.

Операция индексирования operator[], если такого элемента
в массиве нет и operator[] – в правой части операции присваивания,
то возвращать 0 (точнее, значение конструктора по умолчанию для данного типа). Если такого элемента в массиве нет и operator[] – в левой части операции присваивания, то вставлять элемент в список. Внешние функции: operator==, operator!=; бинарные operator+, operator-.

8.       Многочлен на базе списка.

Функции-члены многочлена: конструктор; деструктор; конструктор копии; operator =; operator[] (см. комментарий к operator[] для разреженного массива); унарные operator+, operator-; все возможные комбинации operator+=, operator-=, operator*=; operator() – вычисление многочлена в точке.

Внешние функции: operator==; operator!=; operator+,
operator-, operator*– бинарные; operator* – умножение на число; operator<< – вывод в поток; operator>> – ввод из потока.

9.       Ассоциативный массив на базе списка с итератором.

В ассоциативном массиве в качестве ключа использовать строку.

Функции-члены массива: конструктор по умолчанию; деструктор; конструктор копии; operator=; operator[]; operator<<; operator+= – добавление элемента; operator+= – добавление в конец списка другого списка; find – поиск значения по ключу и возвращение итератора на него; remove – удаление элемента по ключу.

Функции-члены итератора массива: конструктор; eoa – состояние «конец массива»; operator++ – префиксный и постфиксный; operator* – ссылка на текущий элемент в массиве.

Внешние функции: operator==; operator!=; operator+ – соединение двух массивов в третий; operator<< – вывод в поток;
operator>> – ввод из потока (признак конца ввода – ввод некоторого значения); foreach – применение функции, передаваемой в качестве параметра, к диапазону значений, задаваемому парой итераторов; find – поиск значения в диапазоне, задаваемом парой итераторов, и возвращение итератора на него.

10.  Бинарное дерево поиска с итераторами.

Функции-члены дерева: конструктор по умолчанию, деструктор, конструктор копии; operator=; определение глубины дерева; operator<< и operator+= – вставка элемента в дерево; remove – удаление элемента из дерева.

Функции-члены итераторов дерева (три итератора для трех направлений обхода): конструктор; eot – состояние «конец дерева»; operator++ и operator-- – префиксные и постфиксные; operator* – ссылка на текущий элемент в дереве.

Внешние функции: operator==, operator!=; operator+ – объединение деревьев; operator<< – вывод в поток (с одним из итераторов).

11.  Дерево с подсчетом ссылок.

Каждый элемент хранит список элементов следующего уровня,
на которые он ссылается. Элементы могут находиться в нескольких деревьях, поэтому должны иметь счетчик своих владельцев. В дереве необходимо хранить не сами элементы, а указатели на них.

Функции-члены: конструктор по умолчанию; деструктор; конструктор копии; operator=; operator<< и insert – вставка поддерева или элемента в данное поддерево; remove – удаление поддерева или элемента; find – поиск элемента в дереве (поддереве); foreach – применение функции, передаваемой в качестве параметра, ко всем элементам дерева.

Внешние функции: operator==; operator!=; operator<< – вывод в поток.