C ++ std for_each loop

C ++ std for_each loop
“Os loops DST :: For-Each são uma capacidade diferente que serve ao mesmo objetivo que as técnicas gerais de looping como“ for ”,“ while ”e“ do-while ”que são suportadas pela linguagem C ++. Este loop leva uma função que percorre cada elemento do contêiner antes de retornar. Para que este loop funcione, deve ser incluído porque é especificado no arquivo de cabeçalho "Algoritmo": #include sempre que você itera através dos elementos de uma matriz ou contêiner e realiza várias operações nelas, como acessar, mudar, etc. Embora você possa obter o mesmo resultado inserindo o loop inteiro, usando esse método economizará tempo, cortará o número de códigos de programa e diminuirá a probabilidade de alguns insetos.”

Sintaxe de std :: for_each () loop em c++

A sintaxe de std :: para cada () loop, implantamos em c ++ é o seguinte:

for_each (BEGN_IITERATOR, END_ITERATER, FUNC)


Onde Func é uma função de um parâmetro que leva cada item do intervalo [Begin, End] como um argumento, e começa e o fim são os iteradores de entrada que se referem aos pontos de partida e final da região na sequência para avaliar. Abaixo, explicamos a funcionalidade de cada parâmetro.

Begin_Iterator: um iterador de entrada referente à primeira posição na sequência que estamos usando para avaliação que inicia o intervalo.

end_iterator: um iterador de entrada refere -se ao final da faixa na sequência de avaliação que estamos usando.

FUNC: uma função com um argumento que leva cada componente do intervalo [start, fim] como um argumento. O parâmetro da função pode ser fornecido "por referência" ou "por valor.”Esta função pode ou não produzir um resultado.

Exemplo 1

Vejamos um exemplo direto em que usamos a função STD :: para cada () para produzir todos os elementos dentro do intervalo [Start, End].

#incluir
#incluir
#incluir
void Display_Item (int item)
std :: cout<
int main ()
Std :: Array int_array = 2,4,6, -6,0,110, -2,77;
std :: cout<<"Displaying the items: \n";
std :: for_each (int_array.BEGIN (), INT_ARRAY.end (), display_item);
retornar 0;



O código começa na seção de cabeçalho. Temos três arquivos de cabeçalho de C++. Para utilizar o std :: for_each loop, adicionamos o arquivo de cabeçalho do algoritmo. Em seguida, criamos a função void como display_item, que leva um item de entrada do tipo de dados INT. Dentro dessa função, temos apenas o comando std :: cout para esta variável de item.

Em seguida, temos a principal função onde declaramos e inicializamos uma matriz. O std :: for_each loop é usado para pedalar sobre cada elemento na matriz dada. A função Display_Item é chamada para exibir a matriz de elementos dentro do intervalo [BEGIN, END] por apenas uma vez.

Exemplo 2

Utilizando std :: para cada um fazer alterações persistentes na coleção. A função fornecida leva os parâmetros de "referência" para modificar os elementos da coleção permanentemente.

#incluir
#incluir
#incluir
void func_uppercase (std :: string & str_val)
para (int i = 0; iif (str_val [i]> = 'a' e str_val [i] <= 'z')
str_val [i] = (char) (str_val [i]-'a' + 'a');



int main ()
std :: cout<<"output: \n";
Std :: Array str_array = "The", "Program", "de",
"C ++";
std :: for_each (str_array.BEGIN (), STR_ARRAY.end (), func_uppercase);
para (int i = 0; istd :: cout<
retornar 0;



Aqui na etapa inicial, importamos os arquivos de cabeçalho para a implementação do programa. Depois disso, construímos uma função func_uppercase para transformar a sequência de casos inferiores na sequência de casos superiores. Em seguida, implantamos o método principal em que definimos uma variedade de cordas que têm toda a minúsculas. O std :: for_each loop é usado para iterar sobre todos os caracteres da string. O std :: for_each loop invoca a função func_uppercase como um argumento para cada caractere de string no intervalo [BEGIN, END]. Depois disso, temos um loop para imprimir todos os caracteres da string após a conversão na parte superior.

Você pode visualizar na tela de saída que todos os caracteres de string minúsculos são transformados em maiúsculas.

Exemplo 3

O exemplo a seguir emprega uma função lambda para aumentar cada membro em um vetor antes de calcular sua soma usando um operador sobrecarregado () no objeto de uma função, também conhecido como functor.

#incluir
#incluir
#incluir
struct add
Add () add = 0;
operador void () (int n) add += n;
int add;
;
int main ()

std :: vetor números 4, 5, 1, 8, 16, 221;
std :: cout << "Numbers before: ";
para (Auto n: números)
std :: cout << n << " ";

std :: cout << '\n';
std :: for_each (números.begin (), números.end (), [] (int & n) n ++; );
Adicione a = std :: for_each (números.begin (), números.end (), add ());
std :: cout << "Numbers after: ";
para (Auto n: números)
std :: cout << n << " ";

std :: cout << '\n';
std :: cout << "Result: " << a.add << '\n';



Aqui, estabelecemos uma estrutura e atribuímos um nome adicionado. A função add () também é definida lá e, dentro dessa função, inicializamos a variável Adicionar com o número zero. Além disso, a função vazia é criada com o operador de nome, que incrementa o valor de n. Então vem o principal método deste programa.

Dentro do método principal, declaramos a classe vetorial, onde inicializamos a lista de números aleatórios. Imprimimos os números usando o loop for. Depois disso, temos std :: for_each loop para a iteração sobre cada elemento na lista de números e, em seguida, cada elemento da lista é incrementado. Imprimimos os números após a operação de loop for_each. No final, exibimos a soma dos números criando o objeto como um invocando a variável Add variável.

Os números são gerados antes e depois do loop for_each como uma saída. Além disso, a soma dos números é exibida abaixo.

Exemplo 4

A impressão de elementos em qualquer contêiner é possível com a função STD :: for_each. Para entender como usá -lo, veja o exemplo em que imprimimos um vetor e um mapa abaixo.

#incluir
#incluir
#incluir
#incluir
usando namespace std;
void function_1 (int i)

cout << i << " ";

void function_2 (par p1)

cout << p1.first << "->" << p1.second << endl;

int main ()

vetor matriz 2, 5, 1, 9, 3, 8;
mapa map_val;
map_val ['a'] = 2;
map_val ['b'] = 3;
map_val ['c'] = 6;
map_val ['d'] = 5;
map_val ['e'] = 8;
map_val ['f'] = 9;
cout << "Displaying the vector\n";
for_each (Array.BEGIN (), Array.end (), function_1);
cout << "\n";
cout << "Displaying the map\n";
for_each (map_val.begin (), map_val.end (), function_2);
cout << "\n";
retornar 0;



Definimos a função como function_1 onde a variável "i" é declarada e, dentro dessa função, exibimos o "eu" com o comando cout. Em seguida, construímos outra função como function_2, que é chamada de classe de pares, e definimos o objeto P. Dentro da function_2, definimos cada elemento em um par para o mapa. Então, dentro da função principal, inicializamos uma matriz de vetores e também mapeamos valores. Em seguida, utilizamos o loop for_each para os vetores e os mapas para iteração em cada elemento.

A execução do programa acima gerou a seguinte saída.

Conclusão

Portanto, a utilização de std :: for_each () tem o benefício de tornar o nível do produto e diminuindo o tamanho da base de código. Além disso, O (n) é a complexidade temporal. Você pode usar o std :: for_each () em qualquer situação em que todo elemento deve passar por muito processamento e ter uma grande base de código. O std mais flexível :: for_each (). Qualquer tipo de contêiner pode ser usado com iteração. Além de Std :: for_each (), ele nos permite criar um algoritmo que opera com um iterador.