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


remove_copy

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

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

Параметры

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

  • _Last
    Итератор ввода final адресации позиция одно за элементом в диапазоне от, какие элементы удалить.

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

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

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

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

Заметки

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

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

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

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

Сложность линейная. (_Last – _First) сравнения на равенство и максимум (_Last – _First) назначения.

remove_copy имеет значение 2, связанных форм:

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

Пример

// 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 Samples)

Стандартная библиотека шаблонов