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

1 ... 109 110 111 [ 112 ] 113 114 115 ... 156


Класс RangeArray также предоставляет функции, не относящиеся к стандарту библиотеки STL, getiowerbound () И де t upper bound О. Они возвращают значение верхней и нижней фаниц объекта RangeArray соответственно. Далее приведен код этих функций. Возвращает границы, int getiowerboundО {

return lowerbound;

int getupperboundO {

return upperbound;

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

Далее приведен код перефуженных операций отношения, которые определены в классе RangeArray.

teiiplate<class Т, class Allocator>

bool operator==(const RangeArray<T, Allocator> &a, const RangeArray<T, Allocator> &b)

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

teiiplate<class T, class Allocator>

bool operator!=(const RangeArxay<T, Allocator> &a, const RangeArray<T, Allocator> &b)

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

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

teinplate<class T, class Allocator>

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

const RangeArray<T, Allocator> &b)



return lexicographical coitpare (а. begin (), а. end (), b.beginO, b.endO);

t.0t5>late<class T, class Allocator> bool operator>(const RangeArray<T, Allocator> &a, const RangeArray<T, Allocator> &b)

return b < a;

teirplate<class T, class Allocator> bool operator<=(const RangeArray<T, Allocator> &a, const RangeArray<T, Allocator> &b)

return !(a > b) ;

template<class T, class Allocator> bool operator>=(const RangeArray<T, Allocator> &a, const RangeArray<T, Allocator> &b)

return !(a < b) ;

Операции operatt)r=() и operator ! = о ИСПОЛЬЗуют алгорИТМ equal о ДЛЯ

определения равенства. Как определено в этом алгоритме, два объекта считаются тождественными, если каждый содержит одни и те же элементы, расположенные в одинаковом порядке.

Операция < использует функцию iexicographicai compare () ДЛЯ определения того, что один объект меньше другого. Применение этой функции рекомендуется стандартом языка С++. Она сравнивает соответствующие элементы двух последовательностей до появления первого несовпадения. Если несовпадение обнаружено, функция возврашает true, когда элемент первой последовательности меньше элемента второй, и false - в противном случае.

Несколько примеров применения Контейнера RangeArray

Ь листингах 8.2-8.4 приведены программы, демонстрирующие использование разработанного контейнера RangeArray. в первой (листинг 8.2) тестиру- отся различные функции-члены класса. Она также использует три алгоритма.



Дистинг 8.2. Демонстрация базовых операций контейнера кдпделггау

# include <iostreain> #include <algorithm> #include <functional> #include ra.h using namespace std;

Выводит целые для использования в алгоритме for each.

void display (int v)

cout v ;

int mainO {

RangeArray< int> ob(-5, 5, 0); RangeArray<int>::iterator p; int i, sum;

cout Size of ob is: ob.sizeO endl;

cout Initial contents of ob:\n ; forCi=-5; i <= 5; i++) cout ob[i] ; cout endl;

Задает значения.

for(i=-5; i <= 5; i++) ob[i] = i;

cout New values for ob: \n ; p = ob.begin(); do {

cout *p++ ;

) while (p != ob.endO ); cout endl;

объект-функцию и связыватель (binder). Применение этих элементов доказывает, что объект типа RangeArray - ЭТО полнофункциональный контей-нер, совместимый с остальными контейнерами библиотеки STL.



1 ... 109 110 111 [ 112 ] 113 114 115 ... 156

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