|
Программирование >> Формирование пользовательского контейнера
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)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |