Biblioteca de algoritmos C ++ - função copy_if ()

Descrição

A função C ++ std::algorithm::copy_if() copia um intervalo de elementos para um novo local se o predicado retornar verdadeiro para o valor.

Declaração

A seguir está a declaração para o cabeçalho da função std :: algorithm :: copy_if () std :: algorithm.

C ++ 11

template <class InputIterator, class OutputIterator, class UnaryPredicate>
OutputIterator copy_if(InputIterator first,InputIterator last,
   OutputIterator result,UnaryPredicate pred);

Parâmetros

  • first - Insira iteradores nas posições iniciais da sequência pesquisada.

  • last - Insira iteradores nas posições finais da sequência pesquisada.

  • result - O iterador de saída para a posição inicial na nova sequência.

  • pred - Predicado unário que recebe um argumento e retorna um valor booleano.

Valor de retorno

Retorna um iterador apontando para o elemento que segue o último elemento escrito na sequência de resultados.

Exceções

Lança uma exceção se a atribuição de elemento ou uma operação em um iterador lança uma exceção.

Observe que os parâmetros inválidos causam um comportamento indefinido.

Complexidade de tempo

Linear na distância entre o primeiro e o último .

Exemplo

O exemplo a seguir mostra o uso da função std :: algorithm :: copy_if ().

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool predicate(int n) {
   return (n %2 != 0);
}

int main(void) {
   vector<int> v1 = {1, 2, 3, 4, 5};
   vector<int> v2(3);

   copy_if(v1.begin(), v1.end(), v2.begin(), predicate);

   cout << "Following are the Odd numbers from vector" << endl;

   for (auto it = v2.begin(); it != v2.end(); ++it)
      cout << *it << endl;

   return 0;
}

Vamos compilar e executar o programa acima, isso produzirá o seguinte resultado -

Following are the Odd numbers from vector
1
3
5