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

1 ... 375 376 377 [ 378 ] 379 380 381 ... 395


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

int main()

vector< int, allocator > vec; for ( int ix = 0; ix < 20; ix++ )

vec.push back( ix ); random shuffle( vec.begin(), vec.end() ); печатает:

random shuffle для последовательности 1 .. 20:

6 11 9 2 18 12 17 7 0 15 4 8 10 5 1 19 13 3 14 16

cout << random shuffle для последовательности 1 .. 20:\n ; copy( vec.begin(), vec.end(), ostream iterator< int >( cout, ));

template< class ForwardIterator, class Type >

ForwardIterator

remove( ForwardIterator first,

Алгоритм remove()

ForwardIterator last, const Type &value );

remove() удаляет из диапазона [first,last) все элементы со значением value. Этот алгоритм (как и remove if() ) на самом деле не исключает элементы из контейнера (т. е. размер контейнера сохраняется), а перемещает каждый оставляемый элемент в очередную позицию, начиная с first. Возвращаемый итератор указывает на элемент, следующий за позицией, в которую помещен последний неудаленный элемент. Рассмотрим, например, последовательность {0,1,0,2,0,3,0,4}. Предположим, что нужно удалить все нули. В результате получится последовательность {1,2,3,4,0,4,0,4}. 1 помещена в первую позицию, 2 - во вторую, 3 - в третью и 4 - в четвертую. Элементы, начиная с 0 в пятой позиции, - это отходы алгоритма. Возвращенный итератор указывает на 0 в пятой позиции. Обгчно этот итератор затем передается алгоритму erase() , который удаляет неподходящие элементы. (При работе со встроенным массивом лучше использовать алгоритмы remove copy() и remove copy if() , а не remove() и remove if() , поскольку его размер невозможно изменить)

Алгоритм remove copy()



template< class InputIterator, class OutputIterator,

class Type > OutputIterator

remove copy( InputIterator first, InputIterator last,

OutputIterator result, const Type &value );

remove copy() копирует все элементы, кроме имеющих значение value, в контейнер, на начало которого указывает result. Возвращаемый итератор указывает на элемент за

#include <algorithm>

#include <vector>

#include <assert.h>

#include <iostream.h>

/* печатается:

исходн вектор:

0 1 0 2 0 3 0 4 0 5

вектор после remove до erase():

1 2 3 4 5 3 0 4 0 5 вектор после erase(): 1 2 3 4 5

массив после remove copy() 1 2 3 4 5

int main()

int value = 0;

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

vector< int, allocator > vec( ia, ia+10 );

ostream iterator< int > ofile( cout, );

vector< int, allocator >::iterator vec iter;

cout << исходн вектор:\n ; copy( vec.begin(), vec.end(), ofile ); cout << \n;

vec iter = remove( vec.begin(), vec.end(), value );

cout << вектор после remove до erase():\n ; copy( vec.begin(), vec.end(), ofile ); cout << \n;

/ / удать из контейнера неподходяще элементы vec.erase( vec iter, vec.end() );

cout << вектор после erase():\n ; copy( vec.begin(), vec.end(), ofile ); cout << \n;

int ia2[5];

vector< int, allocator > vec2( ia, ia+10 ); remove copy( vec2.begin(), vec2.end(), ia2, value );

cout << массив после remove copy():\n ; copy( ia2, ia2+5, ofile ); cout << endl;

последним скопированн1м. Исходный контейнер не изменяется.



template< class ForwardIterator, class Predicate > ForwardIterator

remove if( ForwardIterator first,

Алгоритм remove if()

ForwardIterator last, Predicate pred );

remove if() удаляет из диапазона [first,last) все элементы, для которых значение предиката pred равно true. remove if() (как и remove() ) фактически не исключает удаленные элементы из контейнера. Вместо этого каждый оставляемый элемент перемещается в очередную позицию, начиная с first. Возвращаемый итератор указывает на элемент, следующий за позицией, в которую помещен последний неудаленный элемент. Обычно этот итератор затем передается алгоритму erase() , который удаляет неподходящие элементы. (Для встроенных массивов лучше использовать алгоритм remove copy if() .)

template< class InputIterator, class OutputIterator,

class Predicate > OutputIterator

remove copy if( InputIterator first, InputIterator last,

Алгоритм remove copy if()

OutputIterator result, Predicate pred );

remove copy if() копирует все элементы, для которых предикат pred равен false, в контейнер, на начало которого указывает итератор result. Возвращаемый итератор указывает на элемент, расположенный за последним скопированн1м. Исходный контейнер остается без изменения.



1 ... 375 376 377 [ 378 ] 379 380 381 ... 395

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