|
Программирование >> Инициализация объектов класса, структура
#include <algorithm> #include <list> #include <string> #include <assert.h> #include <iostream.h> class size compare { public: bool operator()( const string &a, const string &b ) { return a.length() <= b.length(); int main() string arr1[] = { Piglet , Pooh , Tigger }; string arr2[] = { Piglet , Pooch , Eeyore }; arr2[] = bool res; на втором элементе получаем false Pooch меньше Pooh на третьем элементе тоже получили бы false are( arr1, arr1 arr2, arr2+3 ); lexicographical compare( arr1, arr1+3, assert( res == false ); элемента получаем true: длина каждого элемента ilist2 меньше либо равна длине соответственного а ilist1 list< string, allocator > ilist1( arr1, arr1+3 ); list< string, allocator > ilist2( arr2, arr2+3 ); res = lexicographical compare( ilist1.begin(), ilist1.end(), ilist2.begin(), ilist2.end(), size compare() ); cout << ok: lexicographical compare завершился успешно!\n ; Алгоритм lower bound() template< class ForwardIterator, class Type > ForwardIterator lower bound( ForwardIterator first, ForwardIterator last, const Type &value ); template< class ForwardIterator, class Type, class Compare > ForwardIterator lower bound( ForwardIterator first, ForwardIterator last, const Type &value, class Compare ); lower bound() возвращает итератор, указывающий на первую позицию в отсортированной последовательности, ограниченной диапазоном [first,last) , в которую можно вставить значение value, не нарушая упорядоченности. В этой позиции находится значение, большее либо равное value. Например, если дана такая последовательность: int ia = = {12,15,17,19,20,22,23,26,29,35,40,51}; то обращение к lower bound() с аргументом value=21 возвращает итератор, указывающий на 23. Обращение с аргументом 22 возвращает тот же итератор. В первом варианте алгоритма используется оператор меньше , определенный для типа элементов контейнера, а во втором для упорядочения элементов применяется объект comp. #include <algorithm> #include <vector> #include <iostream.h> int main() int ia[] = {29,23,20,22,17,15,26,51,19,12,35,40}; sort( &ia[0], &ia[12] ) ; int search value = 18; int *ptr = lower bound( ia, ia+12, search value ); Перв элемент, перед котор можно вставить 18, - это 19 печатается: Первый элемент, перед которым Предыдущее значение равно 17 cout << Первый элемент, перед которым можно вставить << search value < , - это < *ptr << endl < Предыдущее значение равно << *(ptr-1) << endl; vector< int, allocator > ivec( ia, ia+12 ); отсортировать в порядке возрастания ... sort( ivec.begin(), ivec.end(), greater<int>() ); search value = 26; vector< int, allocator >::iterator iter; необходимо указать, как именно осуществлялась сортировка ... iter = lower bound( ivec.begin(), ivec.end(), search value, greater<int>() ); печатается: Первый элемент, перед которым можно вставить 26, - это 26 Предыдущее значение равно 29 cout << Первый элемент, перед которым можно вставить << search value < , - это < *iter << endl < Предыдущее значение равно << *(iter-1) << endl; return 0; Алгоритм max()
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |