Поделиться через


remove_copy

Копирует элементы из диапазона источника в качестве назначения, за исключением того, что элементы заданного значения не копируются без нарушения порядок остальных элементов и возвращая конец назначения нового диапазона.

template<class InputIterator, class OutputIterator, class Type> 
   OutputIterator remove_copy( 
      InputIterator _First,  
      InputIterator _Last,  
      OutputIterator _Result, 
      const Type& _Val 
   );

Параметры

  • _First
    Итератор ввода слишком позицию первого элемента в диапазоне от элементов удаления.

  • _Last
    Итератор ввода слишком положение за одно окончательное элементом в диапазоне от элементов удаления.

  • _Result
    Итератор вывода слишком позицию первого элемента в диапазоне назначения для элементов, удалить.

  • _Val
    Значение, которое необходимо удалить из диапазона.

Возвращаемое значение

Передний итератор слишком новая конечная позиция диапазона назначения, одно окончательное за элементом копии последовательности обмылка свободно указанного значения.

Заметки

Связанные диапазоны источника и назначения должны быть допустимыми; все указатели должны быть dereferenceable и внутри последовательности последнего положения доступен из первого инкрементацией.

Должно быть достаточным объемом памяти в диапазоне назначения, чтобы содержать элементы обмылка, будут отменены после того, как элементы заданного значения будут удалены.

Порядок не удаленных элементов оно остается.

operator== используется, чтобы определить равенство между элементами должен создать связь между ее эквивалентности операндами.

Сложность линейная; (_Last — _First) сравнения на равенство и не более (_Last — _First) назначения.

remove_copy имеет две связанные формы:

Дополнительные сведения о том, как ведут себя эти функции, см. в разделе Проверяемые итераторы.

Пример

// alg_remove_copy.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
   using namespace std;
   vector <int> v1, v2(10);
   vector <int>::iterator Iter1, Iter2, new_end;

   int i;
   for ( i = 0 ; i <= 9 ; i++ )
      v1.push_back( i );

   int ii;
   for ( ii = 0 ; ii <= 3 ; ii++ )
      v1.push_back( 7 );
   
   random_shuffle (v1.begin( ), v1.end( ) );
   cout << "The original vector v1 is:     ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Remove elements with a value of 7
   new_end = remove_copy ( v1.begin( ), v1.end( ), v2.begin( ), 7 );

   cout << "Vector v1 is left unchanged as ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   cout << "Vector v2 is a copy of v1 with the value 7 removed:\n ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")." << endl;
}

Пример результатов выполнения

The original vector v1 is:     ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
Vector v1 is left unchanged as ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
Vector v2 is a copy of v1 with the value 7 removed:
 ( 1 9 2 0 3 4 6 8 5 0 ).

Требования

Заголовок: <algorithm>

Пространство имен: std

См. также

Ссылки

remove_copy (примеры STL)

Библиотека стандартных шаблонов