"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора

Функция size возвращает число элементов вектора, таким образом
индексы должны лежать в диапазоне 0 ... size()-1. Функция set_size
сделана для изменения этого размера, elem обеспечивает доступ к
элементам без проверки индекса, а operator[] дает доступ с
проверкой границ.
Идея состоит в том, чтобы класс сам был структурой фиксированного
размера, управляющей доступом к фактической памяти вектора, которая
выделяется конструктором вектора с помощью распределителя свободной
памяти new:

vector::vector(int s)
{
if (s<=0) error("плохой размер вектора");
sz = s;
v = new int[s];
}

Тепрь вы можете описывать вектора типа vector почти столь же
элегантно, как и вектора, встроенные в сам язык:

vector v1(100);
vector v2(nelem*2-4);

Операцию доступа можно определить как

int& vector::operator[](int i)
{
if(i<0 || sz<=i) error("индекс выходит за границы");
return v[i];
}

Операция || (ИЛИИЛИ) - это логическая операция ИЛИ. Ее правый
операнд вычисляется только тогда, когда это необходимо, то есть
если вычисление левого операнда дало ноль. Возвращение ссылки
обеспечивает то, что запись [] может использоваться с любой стороны
операции присваивания:

v1[x] = v2[y];

Функция со странным именем ~vector - это деструктор, то есть
функция, описанная для того, чтобы она неявно вызывалась, когда
объект класса выходит из области видимости. Деструктор класса C
имеет имя ~C. Если его определить как

- стр 38 -

vector::~vector()
{
delete v;
}