В конструкторе по умолчанию
template<typename T>
container<T>::container()
{
n = 0;
arr[CAPACITY] = {0};
}
вы пытаетесь инициализировать несуществующий элемент массива с индексом CAPACITY. В результате ваша программа имеет неопределенное поведение,
На самом деле нет необходимости инициализировать массив. Он будет инициализирован по умолчанию.
template<typename T>
container<T>::container() : n( 0 )
{
}
Все эти функции, isEmpry, isFull, емкость и размер должны быть объявлены с квалификатором const.
Функция isFull
имеет логическую ошибку , Контейнер будет заполнен, когда его размер будет равен его вместимости
template<typename T>
bool container<T>::isFull() const
{
return n == CAPACITY;
}
Функция Friend может быть не шаблонной функцией, определенной в определении класса, например
template<typename T>
class container
{
friend std::ostream& operator<<(std::ostream& out, const container<T> &cobj)
{
//...
}
//...
Если вы сделайте все эти изменения, тогда вывод программы будет
We now insert 10 values at the back of the array one at a time:
Container storage capacity = 10
Currently, container contains 10 elements.
The contents of the container:
aa bb cc dd ee ff gg hh ii jj