Задача 2. Спроектировать шаблон классов Vector, в котором должен быть реализован вектор. Вектор должен быть предназначен для хранения элементов произвольного типа. Размеры вектора неограничены, то есть должен быть реализован связанный метод хранения вектора (см. Связные списки в C++).

Структура связного списка в C++

Структура связного списка в C++

В классе должны быть реализованы следующие функции:
1.    bool IsEmpty () – возвращает true, если вектор пуст, false – не пуст;
2.    unsigned int GetSize () – возвращает число элементов вектора (если вектор испорчен, возвращает 0);
3.    T& GetFront () – возвращает значение первого элемента вектора (но не удаляет его из вектора);
4.    T& GetBack () – возвращает значение последнего элемента вектора (но не удаляет его из вектора);
5.    void PushBack (const T& val) – помещает новый элемент в конец вектора;
6.    void PopBack () – удаляет (но не возвращает) последний элемент вектора;
7.    T& at (unsigned int i) – возвращает значение i-го элемента вектора. Причем должна осуществляться проверка, попадает ли переданный функции индекс в диапазон допустимых значений. Если нет, выдать соответствующее сообщение.
Написать программу, демонстрирующую работу с вектором (использующую все его функции).
Для хранения элементов вектора можно использовать структуру node, преобразовав ее в шаблон (шаблоны структур создаются так же, как и шаблоны классов). Класс Vector  должен хранить указатель на первый элемент (используется в функции GetFront()) и указатель на последний занесенный в вектор элемент.

Вы просто обязаны почитать интересный seo блог, в котором написано очень много полезного.