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