Os manipuladores ajudam funções que podem modificar o fluxo de entrada / saída . Isso não significa que alteramos o valor de uma variável, apenas modifica o fluxo de E / S usando os operadores de inserção (<<) e extração (>>).

Por exemplo, se quisermos imprimir o valor hexadecimal de 100, podemos imprimi-lo como:

cout<<setbase(16)<<100

Tipos de Manipuladores

Existem vários tipos de manipuladores:

  1. Manipuladores sem argumentos : Os manipuladores mais importantes definidos pela biblioteca IOStream são fornecidos abaixo.
    • endl : é definido no ostream. É usado para inserir uma nova linha e, após inserir uma nova linha, esvazia (ou seja, força toda a saída escrita na tela ou no arquivo) o fluxo de saída.
    • ws : é definido em istream e é usado para ignorar os espaços em branco na sequência da string.
    • termina : Também é definido no ostream e insere um caractere nulo no fluxo de saída. Normalmente funciona com std::ostrstream, quando o buffer de saída associado precisa ter terminação nula para ser processado como uma string C.
    • flush : Também é definido no ostream e libera o fluxo de saída, ou seja, força toda a saída escrita na tela ou no arquivo. Sem flush, a saída seria a mesma, mas pode não aparecer em tempo real.

      Exemplos:






      #include <iostream>
      #include <istream>
      #include <sstream>
      #include <string>
        
      using namespace std;
        
      int main()
      {
          istringstream str("           Programmer");
          string line;
          // Ignore all the whitespace in string
          // str before the first word.
          getline(str >> std::ws, line);
        
          // you can also write str>>ws
          // After printing the output it will automatically
          // write a new line in the output stream.
          cout << line << endl;
        
          // without flush, the output will be the same.
          cout << "only a test" << flush;
        
          // Use of ends Manipulator
          cout << "\na";
        
          // NULL character will be added in the Output
          cout << "b" << ends;
          cout << "c" << endl;
        
          return 0;
      }
      Saída:
      Programador
      apenas um teste
      abc
      
  2. Manipuladores com argumentos: alguns dos manipuladores são usados ​​com argumentos como setw (20), setfill ('*') e muitos mais. Todos eles são definidos no arquivo de cabeçalho. Se quisermos usar esses manipuladores, devemos incluir este arquivo de cabeçalho em nosso programa.

    Por exemplo, você pode usar os seguintes manipuladores para definir a largura mínima e preencher o espaço vazio com qualquer caractere que desejar: std::cout << std::setw (6) << std::setfill ('*');

    • Alguns manipuladores importantes em <iomanip> são:
      1. setw (val): É usado para definir a largura do campo nas operações de saída.
      2. setfill (c): É usado para preencher o caractere 'c' no fluxo de saída.
      3. setprecision (val): define val como o novo valor para a precisão dos valores de ponto flutuante.
      4. setbase (val): É usado para definir o valor base numérico para valores numéricos.
      5. setiosflags (flag): É usado para definir os flags de formato especificados pelo parâmetro mask.
      6. resetiosflags (m): É usado para redefinir os sinalizadores de formato especificados pelo parâmetro máscara.
    • Alguns manipuladores importantes em <ios> são:
      1. showpos: Força a mostrar um sinal positivo em números positivos.
      2. noshowpos: Força a não escrever um sinal positivo em números positivos.
      3. showbase: indica a base numérica dos valores numéricos.
      4. maiúsculas: força letras maiúsculas para valores numéricos.
      5. nouppercase: Força letras minúsculas para valores numéricos.
      6. fixo: usa notação decimal para valores de ponto flutuante.
      7. científico: usa notação científica de ponto flutuante.
      8. hex: Lê e grava valores hexadecimais para inteiros e funciona da mesma forma que setbase (16).
      9. dec: Lê e grava valores decimais para inteiros, ou seja, setbase (10).
      10. oct: Lê e grava valores octais para inteiros, ou seja, setbase (10).
      11. esquerda: ajusta a saída para a esquerda.
      12. direita: ajusta a saída para a direita.

    Exemplo:




    #include <iomanip>
    #include <iostream>
    using namespace std;
      
    int main()
    {
        double A = 100;
        double B = 2001.5251;
        double C = 201455.2646;
      
        // We can use setbase(16) here instead of hex
      
        // formatting
        cout << hex << left << showbase << nouppercase;
      
        // actual printed part
        cout << (long long)A << endl;
      
        // We can use dec here instead of setbase(10)
      
        // formatting
        cout << setbase(10) << right << setw(15)
             << setfill('_') << showpos
             << fixed << setprecision(2);
      
        // actual printed part
        cout << B << endl;
      
        // formatting
        cout << scientific << uppercase
             << noshowpos << setprecision(9);
      
        // actual printed part
        cout << C << endl;
    }
    Saída:
    0x64
    _______ + 2001,53
    2.014552646E + 05
    

Referências:

Quer aprender com os melhores vídeos com curadoria e problemas práticos, confira o C++ Foundation Course for Basic to Advanced C++ e C++ STL Course for Foundation plus STL. Para completar sua preparação desde o aprendizado de um idioma até o DS Algo e muitos mais, consulte o Curso Completo de Preparação para Entrevistas .