cpp::daily - Adição e Concatenação dinâmica.

std::plus e std::transform .


cpp::daily std::plus std::transform

std::plus

std::plus<informar o tipo ou nada> É um objeto Function para realizar a adição. A classe de objeto cuja chamada retorna o resultado da adição de seus dois argumentos (conforme retornado pelo operador +).

  • Exemplo 1

    Somar x + y

#include <iostream>

int main(){
  int x = 3, y = 6;
  std::cout << std::plus<int>{}( x, y ) << '\n'; // 9
  return 0;
}

  • Exemplo 2

    Concatenar duas strings

std::string ola = "Olá, ", mundo = "Mundo!";
std::cout << std::plus<std::string>{}( ola, mundo ) << '\n'; // Olá, Mundo!

  • Exemplo 3

    Concatenar tipos diferentes. Perceba que nesse caso não informamos o tipos para ele.

std::string ter = "Terminal ";
char * roo = "Root";
std::cout << std::plus<>{}( ter, roo ) << '\n'; // Terminal Root

Ahhh! Mas serve só pra somar ou concatenar? Não, ele é utilizado quando você precisa obter resultados dinâmicos e geralmente em conjunto com o std::transform.


std::transform

std::transform( input1, ultimo_input1, input2, operacao );

Aplica a função dada a um intervalo e armazena o resultado em outro intervalo, mantendo a ordem dos elementos originais e começando do primeiro.

Suponhamos que você precisa somar todos os elementos do array1 com o array2, através da maneira genérica você faria:

int array1[] {1, 2, 3},
    array2[] {4, 5, 6},
    total_elem = sizeof(array1) / sizeof(array1[0]),
    x[ total_elem ];

for (int i = 0; i < total_elem; i++) {
x[i] = array1[i] + array2[i];
}

for( auto y : x ){
  std::cout << y << ' ';
} // 5 7 9

std::cout << '\n';

Agora otimizando seu código com std::transform ficaria:

O std::plus como estamos dentro do std::transform não devemos informar o operado: {}

#include <iostream>
#include <algorithm> // para std::transform

int main(){
  int array1[] {1, 2, 3},
      array2[] {4, 5, 6},
      total_elem = sizeof(array1) / sizeof(array1[0]),
      x[ total_elem ];

  for (int i = 0; i < total_elem; i++) {
  x[i] = array1[i] + array2[i]; 
  } 

  std::transform( array1, array1 + total_elem, array2, x, std::plus<int>() );

  for( auto y : x ){
    std::cout << y << ' ';
  } // 5 7 9

  std::cout << '\n';
  return 0;
}

Like a Boss!

Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cppdaily


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!