С++ для начинающих

       

Алгоритм replace_copy_if()


template< class ForwardIterator, class OutputIterator,

          class Predicate, class Type >

OutputIterator

replace_copy_if( ForwardIterator first, ForwardIterator last,

                 class OutputIterator result,

                 Predicate pred, const Type& new_value );

replace_copy_if() ведет себя так же, как replace_if(), только новая последовательность копируется в контейнер, начиная с result. Возвращаемый итератор указывает на элемент, расположенный за последним скопированным. Исходный контейнер остается без изменения.

#include <algorithm>

#include <vector>

#include <iostream.h>

/*

   исходная последовательность:

   0 1 1 2 3 5 8 13 21 34



   последовательность после применения replace_if < 10 с заменой на 0:

   0 0 0 0 0 0 0 13 21 34

   последовательность после применения replace_if четное с заменой на 0:

   0 1 1 0 3 5 0 13 21 0

*/

          

class EvenValue {

public:

           bool operator()( int value ) {

          return value % 2 ? false : true; }

};

int main()

{

           int new_value = 0;

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

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

     ostream_iterator< int >  ofile( cout, " " );

     cout << "исходная последовательность:\n";

     copy( ia, ia+10, ofile ); cout << '\n';

           replace_if( &ia[0], &ia[10],

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

                 

     cout << "последовательность после применения replace_if < 10 "

          << "с заменой на 0:\n";

     copy( ia, ia+10, ofile ); cout << '\n';

           replace_if( vec.begin(), vec.end(),

                 EvenValue(), new_value );

     cout << "последовательность после применения replace_if четное"

          << "с заменой на 0:\n";

     copy( vec.begin(), vec.end(), ofile ); cout << '\n';

}



Содержание раздела