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++ é 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>
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.
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>
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
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();
}
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