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