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