#include <iostream>;
using namespace std;
template <class T> class List {
protected:
class Iterator {
private:
List* element; //указатель на объект
int index; //индекс элемента
public:
Iterator(); // Конструкторы
Iterator(int);
~Iterator();
T& operator *(); //доступ к данным текущего элемента
// Перегрузка
Iterator &operator++(); // Инкремент
Iterator &operator--(); // Дикремент
bool operator ==(const Iterator&); // Равенство
bool operator !=(const Iterator&); // Неравенство
};
friend class Iterator;
private:
int size; // Размер массива, кол-во элементов в списке
int capacity; // Емкость массива
int initCapacity; // Емкость при инициализации
T* data; // Данные
public:
// Конструкторы
List(); // По умолчанию
List(int n); // С параметрами
List (const List<T>&list); // Конструктор копирования
~List(); // Деструктор
int capacityOfList(); // Вывод емкости текущего списка
int sizeOfList(); // Вывод размера текущего массива
T searchPosition(int pos); //поиск по индексу в массиве
bool searchValue(T value); // Проверить на существование
int indexOfValue(T value); // Найти индекс элемента по значению
void push(T value); // Вставить в конец. Если успешно вернет true, если нет false
bool insertInPosition(T value, int position); // Вставить на определенную позицию
bool remove(T value); //удаление значения
bool removeInPosition(int position); //удаление значения по позиции
bool change(T value, int position); //изменение значения элем в указанной позиции
void show(); //вывод массива последовательно
void clear(); //очистка списка
bool isEmpty(); //проверка на пустоту
Iterator begin(); //получение итератора begin( )
Iterator end(); //получение итератора end( )
Iterator rbegin(); //получение итератора rbegin( )
Iterator rend(); //получение итератора rend( )
};
#include "header.h";
// Конструкторы
template <typename T> List<T>::List() {
data = new T[0];
initCapacity = 0;
capacity = 0;
size = 0;
};
template <typename T> List<T>::List(int n) {
data = new T[n];
capacity = n;
initCapacity = n;
size = 0;
};
template <typename T> List<T>::List (const List<T>&list) {
size = list.size;
capacity = list.capacity;
initCapacity = list.initCapacity;
if (data)
delete [] data;
data = new T[size]
for (int i; i < size; i++) {
data[i] = list.data[i];
};
};
template <typename T> List<T>::~List()
{
delete [] data;
};
// Методы
template <typename T> int List<T>::capacityOfList() {
return capacity;
};
template <typename T> int List<T>::sizeOfList() {
return size;
};