"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автораФункция 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); Операцию доступа можно определить как { if(i<0 || sz<=i) error("индекс выходит за границы"); return v[i]; } Операция || (ИЛИИЛИ) - это логическая операция ИЛИ. Ее правый операнд вычисляется только тогда, когда это необходимо, то есть если вычисление левого операнда дало ноль. Возвращение ссылки обеспечивает то, что запись [] может использоваться с любой стороны операции присваивания: v1[x] = v2[y]; Функция со странным именем ~vector - это деструктор, то есть функция, описанная для того, чтобы она неявно вызывалась, когда объект класса выходит из области видимости. Деструктор класса C имеет имя ~C. Если его определить как - стр 38 - vector::~vector() { delete v; } |
|
|