Главная arrow Программирование С++ arrow Функции итератора

Функции итератора

Поскольку итераторы объекта RangeArray — это просто указатели на память, заданную переменной arrayptr, реализация функций итератора begin о и endo тривиальна. Обратите внимание — необходимы как константная, так и неконстантная версии функций.
// Возвращает итератор, указывающий на первый элемент.
iterator begin()
{
return fcarrayptr[0]; (
)
11 Возвращает итератор, указывающий на последний элемент.
iterator end()
{
return &arrayptr[upperbound - lowerbound];
)
11 Возвращает итератор const на первый элемент.
const_iterator begin() const {
return &arrayptr[0];
)
// Возвращает итератор const на последний элемент.
const_iterator end() const
{
return fcarrayptr[upperbound - lowerbound];
}
Разные функции
Все последовательные контейнеры должны предоставлять следующие функции: sizeO, max_size(), emptyO, swapO и ciear(). Далее приведен код этих функций.
// Возвращает размер контейнера.
size_type sizeO const
{
return end() - begin();
}
// Возвращает максимальный размер RangeArray. size_type max_size() { \
return a.max_size();
}
// Возвращает true, если контейнер пуст.
bool empty()
{
return sizeO == 0;
}
// Обменивает значения двух контейнеров.
void swap(RangeArray &b)
{
RangeArray<T> tmp; tmp = *this; ¦this = b;
b = tmp;
// Удаляет и уничтожает все элементы.
void clear()
{
erase(begin(), end());
}
По существу, действие функций интуитивно понятно. Тем не менее функция max_size() заслуживает нескольких слов. Она возвращает количество элементов типа т, содержащихся в самом большом контейнере, который можно создать. Это число получено с помощью вызова функции распределителя памяти max_size().
В класс RangeArray включена также необязательная функция at о, приведенная далее.
// Функция at() выполняет проверку выхода за границы. // Возвращает ссылку на заданный элемент. Т &at(int i) {
if(i < lowerbound || i >= upperbound)
throw out_of_range("Index Out of Range");
return arrayptr[i - lowerbound];
}
// Возвращает ссылку const на заданный элемент.
const T &at(int i) const
{
if(i < lowerbound || i >= upperbound) -throw out_of_range("Index Out of Range");
return arrayptr[i - lowerbound];
}
Функция at () возвращает ссылку на элемент с заданным значением индекса. Она отличается от перегруженной операции индексирования operator!] О только тем, что выполняет проверку выхода индекса за границы диапазона (range check). Если значение индекса находится за пределами Диапазона, генерируется исключение out_of_range. Это исключение определено в С++ и хранится в заголовочном файле <stdexcept>.
}
Класс RangeArray также предоставляет функции, не относящиеся к стандарту библиотеки STL, getiowerbound () и ge t upper bound о. Они возвращают значение верхней и нижней границ объекта RangeArray соответственно. Далее приведен код этих функций. // Возвращает границы, int getiowerbound() {
return lowerbound;
}
int getupperboundO {
return upperbound;
}