Introdução à Programação em C++
Aula 2 - Bibliotecas

Lucas S. Vieira


Universidade Federal dos Vales do Jequitinhonha e Mucuri
Novembro de 2019

Introdução

Bibliotecas: coletâneas de procedimentos, variáveis e outros elementos pré-programados

Criadas com o intuito de reutilização

Podem ser padrão da linguagem ou desenvolvidas por terceiros

A biblioteca-padrão de C++ é extremamente vasta.

Vamos abordar apenas algumas funcionalidades que possam ser úteis.

C vs. C++

C++ é retrocompatível com C.

É possível compilar código C usando um compilador de C++, com pouquíssimas modificações.

Não podemos fazer o inverso.

C e C++ não são linguagens iguais!

Bibliotecas C podem ser usadas em C++ com algumas modificações:

<stdio.h> \(\Rightarrow\) <cstdio>

Sites úteis

http://cplusplus.com
Fórum e documentação das linguagens C e C++, ideal para consulta rápida.

https://cppreference.com
Site com a especificação completa de C++, inclusive com features novas.

Bibliotecas da linguagem C

cstdio

Biblioteca para Entrada e Saída.

#include <cstdio>

printf

Imprime elementos na tela.

int    num       = 5;
float  decimal   = 5.25f;
double ddec      = 9.74;
char   caractere = 'z';

printf("%d %f %lf %c\n",
       num, decimal, ddec, caractere);
5 5.250000 9.740000 z

scanf

Lê elementos do console.

int num;
float dec;
double ddec;
char caract;

scanf("%d %f %lf %c",
      &num, &dec, &ddec, &caract);

cmath

Biblioteca de constantes e funções para Matemática em geral.

#include <cmath>

Constantes

Podem não ser padrão em alguns compiladores.

  • M_E: Constante de Euler (\(e\)).
  • M_PI: \(\pi\).
  • M_PI_2: \(\frac{\pi}{2}\).
  • M_SQRT2: \(\sqrt{2}\).
  • M_SQRT1_2: \(\frac{1}{\sqrt{2}}\).

abs

int val = -2;
int valor_absoluto = abs(val);

cos, sin, tan

Calculam cosseno, seno e tangente de um ângulo em radianos.

\(1 \text{rad} \Rightarrow \frac{180}{\pi} \text{graus}\)

double angle = 60.0;
angle *= M_PI / 180.0;

double seno     = sin(angle);
double cosseno  = cos(angle);
double tangente = tan(angle);

acos, asin, atan

Calculam secante, cossecante e cotangente de um ângulo em radianos.

São "inversas" das operações trigonométricas originais.

double cossec = asin(0.5);
double sec    = acos(0.5);
double cotan  = atan(1.0);

const double fator = 180.0 / M_PI;

printf("%lg %lg %lg\n",
       cossec * fator,
       sec * fator,
       cotan * fator);
30 60 45

atan2

atan2(y, x) deduz o ângulo cuja cotangente seja o resultado da divisão x/y.

\(cotg\left(-10 \div 10\right) = cotg(-1) \approx -45^{\circ} \text{ ou } 135^{\circ}\)

double x = -10.0, y = 10.0;
double angle = atan2(y, x);
angle *= 180.0 / M_PI;
printf("%lg\n", angle);
135

pow

double number = 2.0;
double cube   = pow(number, 3.0);

sqrt

double value = 1024.0;
float  valf  = 25.0f;

double sq    = sqrt(value);
float  sqf   = sqrtf(value);

ceil, floor

Teto e chão de um número real.

double num = 2.4;
double teto = ceil(num);
double chao = floor(num);

printf("%lg %lg\n", teto, chao);
3 2

cstdlib

Biblioteca de propósito geral. Gerenciamento de memória dinâmica, números randômicos, aritmética com inteiros, procura, ordenação, conversões…

#include <cstdlib>

srand, rand

Geração de números pseudo-aleatórios.

srand(time(NULL)); // time está em <ctime>
int val1 = rand() % 100;     // [0, 99]
int val2 = rand() % 100 + 1; // [1, 100]
int val3 = rand();           // [0, RAND_MAX]
printf("%d %d %d\n", val1, val2, val3);
27 5 2063696839

atof, atoi

Conversão de cadeias de caracteres para double e int.

double real    = atof("30.2");
int    inteiro = atoi("25");

system

Executa um comando de console do SO e retorna seu valor de saída.

ATENÇÃO: Evite utilizar por razões de segurança.

if(system(NULL)) { // Se disponível, faça
    int retorno = system("uname -ro");
    printf("Saida do comando: %d\n", retorno);
}
5.3.11_1 GNU/Linux
Saida do comando: 0

Bibliotecas da linguagem C++

Namespaces

Agrupamento para objetos e funções. Age como um prefixo para os mesmos.

Código sem importação de namespace

#include <iostream>
int a;
std::cin >> a;
std::cout << "Hello world!" << std::endl;

Código com importação de namespace

#include <iostream>
using namespace std;
int a;
cin >> a;
cout << "Hello world!" << endl;

Código com importação de uma única estrutura do namespace

#include <iostream>
using std::cout;
int a;
std::cin >> a;
cout << "Hello world!" << std::endl;

iostream

Biblioteca para Entrada e Saída.

#include <iostream>

cin

Objeto que representa o stream padrão de entrada.

int a;
std::cin >> a;

cout

Objeto que representa o stream padrão de saída.

int a = 20;
std::cout << "Ola! Seu numero eh " << a << std::endl;

cerr

Objeto que representa o stream padrão de saída de erros.

std::cerr << "Erro no programa!" << std::endl;

endl

Representa um caractere de nova linha, porém força qualquer saída ainda não realizada a aparecer na tela.

std::cout << std::endl;

iomanip

Biblioteca de manipuladores paramétricos para um stream.

#include <iomanip>

setbase

Define a base de saída ou entrada de um número impresso ou lido.

int a = 255;
std::cout << std::setbase(16) << a << std::endl;
ff

setw

Define a largura para uma entrada ou saída com o tamanho n de caracteres.

int a = 7;
std::cout << a << std::endl
          << std::setw(6) << a << std::endl;
7
     7

setfill

Define o caractere de preenchimento no stream atual.

Melhor utilizado com std::setw.

int a = 7;
std::cout << a << std::endl
          << std::setw(6)
          << std::setfill('0') << a
          << std::endl;
7
000007

setprecision

Define a precisão de um valor real a ser impresso ou lido no stream atual.

const long double pi = std::acos(-1.0L);
int max_lim = std::numeric_limits<long double>::digits10 + 1;
std::cout << pi << std::endl
          << std::setprecision(10) << pi << std::endl
          << std::setprecision(max_lim) << pi << std::endl;
3.14159
3.141592654
3.141592653589793239

fstream

Biblioteca para estruturas básicas de entrada e saída em arquivos.

ofstream

Stream de saída para um arquivo.

std::ofstream ofs;
ofs.open("arquivo.txt");
if(ofs.is_open()) {
    const long double pi = std::acos(-1.0L);
    ofs << "Pi eh igual a " << pi << std::endl;
    ofs.close();
}

ifstream

Stream de entrada para um arquivo.

std::ifstream ifs;
ifs.open("arquivo.txt");
if(ifs.is_open()) {
    std::string nome, sobrenome;
    ifs >> nome >> sobrenome;
    std::cout << "Nome:      " << nome      << std::endl
              << "Sobrenome: " << sobrenome << std::endl;
    ifs.close();
}

Standard Template Library

string

Define std::string, uma abstração para cadeia de caracteres. Não confundir com <cstring>!

#include <string>
std::string minha_string = "Este eh meu texto";
std::cout << minha_string << std::endl;

stack

Define std::stack, uma estrutura de dados last-in-first-out (LIFO).

std::stack<int> pilha;
pilha.push(1);
pilha.push(2);
pilha.push(3);

std::cout << "Topo: " << pilha.top() << std::endl;
pilha.pop();
std::cout << "Topo: " << pilha.top() << std::endl;
Topo: 3
Topo: 2

Exercícios