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


Алгоритм 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;

}



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