Программирование >>  Формирование пользовательского контейнера 

1 ... 103 104 105 [ 106 ] 107 108 109 ... 156


324 G22£afl

Присваивает один контейнер другому-tenplate <class Т, class А> RangeArray<T, А> & RangeArray<T, А>::operator=(const RangeArray<T, A> &o) {

Вызывает деструкторы для элементов в контейнере-приемнике. for(size type i=0; i < sizeO; i++) a.destroy(&arrayptr[i]);

Освобождает исходную память, a.deallocate(arrayptr, size());

Выделяет память для нового размера, arrayptr = a.allocate(o.size());

upperbound = о.upperbound; lowerbound = о. lowerbound; len = o.len;

Создает копию.

for(size type i=0; i < sizeO; i++) arrayptr[i] = о.arrayptr[i];

return *this;

Вставляет val в позицию, заданную p.

tenplate <class T, class A>

typename RangeArray<T, A>::iterator

RangeArray<T, A>::insert(iterator p, const T &val)

iterator q; size type i, j;

Получает необходимую память. Т *tnp = а.allocate(sizeО + 1);

Копирует существующие элементы в новый массив,

если возможно, вставляет новый элемент.



Стирает элемент по адресу p. template <class Т. class A> typename RangeArray<T, A>::iterator RangeArray<T, A>::erase(iterator p) {

iterator q = p;

Уничтожает стертый элемент.

for(i=j=0; i < sizeO; i++, j++) { if(&arrayptr[i] == p) { tnp[j] = val; q = &t:iip[j];

tiiptj] = arrayptr[i];

В противном случае новый элемент перемещается в конец. if(p == endO) {

tnp[j] = val;

q = &tiip[j];

Корректирует длину len и границы. len++;

if(p < &arrayptr[abs (lowerbound) ])

lowerbound-; else

upperbound++;

Вызьтает деструкторы для элементов старого контейнера. for(size type i=0; i < size()-l; i++) a.des troy(&arrayptr[i]);

Очищает память, отведенную для старого контейнера, а.deallocate(arrayptr, size()-l); arrayptr = tnp; return q;



326 {iSfiafi

if(p != endO) a.destroy(p);

Корректирует длину len и границы, len--;

if(p < &arrayptr[abs(lowerbound)])

lowerbound++; else

upperbound-;

Уплотняет оставшиеся элементы. for( ; p < endO; p++)

*p = *(p+l); return q;

******** Операции отношения

template<class T, class Allocator>

bool operator==(const RangeArray<T. Allocator> &a.

const RangeArray<T, Allocator> &b)

if(a.size() != b.sizeO) return false; return equal (a.begin0 , a.endO, b.beginO);

template<class T, class Allocator>

bool operator!=(const RangeArray<T, Allocator> &a.

const RangeArray<T, Allocator> &b)

if(a.SizeO !=b.size()) return true;

return ! equal (a. begin О , a.endO. b.beginO);

template<class T, class Allocator>

bool operator<(const RangeArray<T, Allocator> &a.

const RangeArray<T, Allocator> &b)



1 ... 103 104 105 [ 106 ] 107 108 109 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика