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

Функции очистки

Последовательные контейнеры должны поддерживать два варианта функции erase (). Первый — удаляет элемент, на который указывает итератор. В этом случае функция возвращает итератор, указывающий на элемент, расположенный следом за удаленным, или end(), если был удален последний элемент. Далее приведен первый вариант функции. // Стирает элемент по адресу р. template <class Т, class А> typename RangeArray<T, А>::iterator RangeArray<T, A>::erase(i terator p) {
iterator q = p;
// Уничтожает стертый элемент. if(p != end()) a.destroy(p);
// Корректирует длину len и границы. \  len—;
if (p < &arrayptr [abs (lowerbound) ])
lowerbound++; else
upperbound—;
// Уплотняет оставшиеся элементы, for( ; p < end(); p++) *p = Mp+D;
4  return q; }
В этом варианте функции освобождается память, занимаемая стираемым элементом, корректируются нижняя или верхняя границы соответственно, и потом оставшиеся элементы уплотняются.
Второй вариант функции, приведенный далее, определен с помощью первого варианта. В этом варианте стирается ряд элементов. Функция возвращает итератор, указывающий на последний элемент заданного ряда (т. е. на элемент по адресу stop). Таким образом, она удаляет элементы в диапазоне от start до stop-i включительно. // Стирает заданный диапазон элементов, iterator erase(iterator start, iterator stop) {
iterator p = end();
for(int i=stop-start; i > 0; i—)
р = erase(start); return p;
}
Функции Push и Pop
В класс RangeArray включены приведенные далее следующие функции: push_back(), pop_back(), push_front() И pop_front(). Как видно из кода, они реализованы с помощью функций insert о и eraseo, и действие их очевидно.
// Добавляет элемент в конец, void push_back(const T &val) {
inserc(end(), val);
}
// Удаляет последний элемент.
void pop_back()
{
erase(end()-1);
}
// Добавляет элемент в начало, void push_front(const T &val) {
inserc(begin(), val);
}
// Удаляет начальный элемент.
void pop_front()
{
erase(begin());
}
Функции frontf) и back()
Приведенные далее функции front о и back о просто возвращают итератор, указывающий на начало и конец массива соответственно. Их реализация проста и понятна. Обратите внимание на то, что необходимы оба варианта функций: константный и неконстантный.
// Возвращает ссылку на первый элемент. T &front()
{
return arrayptr[0];
)
// Возвращает ссылку const на первый элемент.
const Т &front() const
{
return arrayptr[0];
}
// Возвращает ссылку на последний элемент.
Т &back()
{
return arrayptr[len-1];
}
// Возвращает ссылку const на последний элемент.
const Т &back() const
{
return arrayptr[len-1];
>