Программирование >>  Инициализация объектов класса, структура 

1 ... 361 362 363 [ 364 ] 365 366 367 ... 395


#include <algorithm> #include <list> #include <iostream.h>

class Even { public:

bool operator()( int val )

{ return val%2 ? false : true; }

int main()

int ia[] = {0,1,1,2,3,5,8,13,21,34};

list< int,allocator > ilist( ia, ia+10 );

* не поддерживается в текущей реализации

*****************************************************

typedef

iterator traits<InputIterator>::distance type distance type;

distance type ia count, list count;

счетч четн1х элементов: 4 ia count = count if( &ia[0], &ia[10], Even() );

list count =

count if( ilist.begin(), ilist end(),

bind2nd(less<int>(),10) );

************************************************

int ia count = 0;

count if( &ia[0], &ia[10], Even(), ia count ); печатается:

count if(): есть 4 четн1х элемент (а).

cout << count if(): есть

<< ia count << четн1х элемент (а) .\n ; int list count = 0;

count if( ilist.begin(), ilist.end(),

bind2nd(less<int>(),10), list count );

печатается:

count if(): есть 7 элемент(ов), меньших 10.

cout << count if(): есть << list count

<< элемент( ов), меньших 10.\n ;



template< class InputIterator1, class InputIterator2 >

bool

eal( InputIterator1 first1,

InputIterator1 last, InputIterator2 first2 );

template< class InputIterator1, class InputIterator2, class BinaryPredicate >

bool

eal( InputIterator1 first1, InputIterator1 last,

Алгоритм equal()

InputIterator2 first2, BinaryPredicate pred );

eal() возвращает true, если обе последовательности одинаковы в диапазоне, ограниченном парой итераторов [first,last) . Если вторая последовательность содержит дополнительные элементы, они игнорируются. Чтобы убедиться в

if ( vec1.size() == vec2.size() &&

тождественности данных последовательностей, необходимо написать:

eal( vec1.begin(), vec1.end(), vec2.begin() );

или воспользоваться оператором равенства, определенном в классе самого контейнера: vec1 == vec2. Если второй контейнер содержит меньше элементов, чем первый, и алгоритму приходится просматривать элементы за концом контейнера, то поведение программы не определено. По умолчанию для сравнения применяется оператор равенства в классе элементов контейнера, а во втором варианте алгоритма - указанный предикат pred.



#include <algorithm>

#include <list>

#include <iostream.h>

class eal and odd{ public:

bool

operator()( int val1, int val2 )

return ( val1 == val2 &&

( val1 == 0 val1 % 2 )) ? true : false;

int main()

int ia[] = { 0,1,1,2,3,5,8,13 };

int ia2[] = { 0,1,1,2,3,5,8,13,21,34 };

bool res;

true: обе последовательности совпадают до длины ia печатается: int ia[7] равно int ia2[9]? Да.

res = eal( &ia[0], &ia[7], &ia2[0] ); cout << int ia[7] равно int ia2[9]?

<< ( res ? Да : Нет ) << .\n ;

list< int, allocator > ilist( ia, ia+7 ); list< int, allocator > ilist2( ia2, ia2+9 );

печатается: список ilist равен ilist2? Да.

res = eal( ilist.begin(), ilist.end(), ilist2.begin() ); cout << список ilist равен ilist2?

<< ( res ? Да : Нет ) << .\n ;

false: 0, 2, 8 не являются равными и нечетными печатается: ссок ilist eal and odd() ilist2? Нет.

res = eal( ilist.begin(), ilist. end(),

ilist2.begin(), eal and odd() );

cout << список ilist eal and odd() ilist2?

<< ( res ? Да : Нет ) << .\n ;

return 0;



1 ... 361 362 363 [ 364 ] 365 366 367 ... 395

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