Subsecções de Declarações
Strings
No C++ representa uma sequência de caracteres
Podemos declarar uma string como:
string nomevar;
string nomevar = constante;
string nomevar = char ∗ variavel;
string nomevar(char ∗ variavel);
string nomevar(tamanho, constante char);
Concatenação
Podemos usar o operador “+” para concatenar duas strings
#include <bits/stdc++.h>
using namespace std;
int main(){
string a = "abc";
string b = "def";
string c = a + b;
cout<<c<<endl;
// abcdef
return 0;
}
Transformando um inteiro em string
Podemos transformar um inteiro em uma string usando a função “to_string()”
#include <bits/stdc++.h>
using namespace std;
int main(){
int x = 123;
string s = to_string(x);
cout<<s<<endl;
return 0;
}
Vector
Vector pode ser entendido como uma estruturas de dados similar a um array de tamanho expansível.
A diferença principal entre vector e array é a alocação: no array adota-se alocação estática, enquanto que no vector a alocaçãao é dinâmica.
Inicializar
#include <bits/stdc++.h>
using namespace std;
int main(){
// inicializando vetores vazios
vector<double> vd;
vector<pair<int,double>> vid;
vector<string> vs;
vector<int> v;
// vector<int> v(tamanho, valor)
vector<int> v(4, 0); // {0, 0, 0, 0} vetor de 4 posições com valor 0
vector<int> v(4); // {0, 0, 0, 0} por default, inicializa como 0
v.push_back(5); // Adiciona o elemento 5
// v = {0, 0, 0, 0, 5}
v.pop_back();
// v = {0, 0, 0, 0}
}
Iterar
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> v = {1, 2, 3, 4, 5};
// printa um elemento em cada linha
for(int i=0; i<v.size(); i++){
cout<< v[i] << endl;
}
}
O método size() retorna a quantidade de elementos existentes em um vector. Complexidade: O(1)
Ordenar
O(N*log(N))
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> v = {3, 4, 1, 2, 5};
sort(v.begin(), v.end()); // ordena o vetor
// v = {1, 2, 3, 4, 5}
}
Inverter
O(N)
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> v = {1, 2, 3, 4, 5};
reverse(v.begin(), v.end());
// v = {5, 4, 3, 2, 1}
}
Vector de Pair
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<pair<int,int>> v = {{1, 2}, {3, 4}, {5, 6}};
// v[0].first = 1
// v[0].second = 2
}
Pairs
O pair é muito importante quando precisamos guardar duas informações juntas.
Um “pair” é um contêiner que consiste de dois tipos de dados ou objetos.
Declaramos um pair como:
pair<tipodado1, tipodado2> variavel;
Podemos inicializá-lo usando o make_pair ou diretamente:
variavel = make_pair(dado1, dado2);
variavel = {dado1, dado2};
- O primeiro elemento é acessado usando o “first” e o segundo usando “second”
variavel.first;
variavel.second;
Exemplo 1:
- Um Pair que armazena 2 inteiros
#include <bits/stdc++.h>
using namespace std;
int main(){
pair<int, int> pii;
pii = {5, 10};
cout<< pii.first << " " << pii.second<<"\n";
// 5 10
return 0;
}
Exemplo 2:
- Um Pair que armazena 1 inteiro e 1 double
#include <bits/stdc++.h>
using namespace std;
int main(){
pair<int, double> pii;
pii = {2, 1.5365};
cout<< pii.first << " " << pii.second<<"\n";
// 2 1.5365
return 0;
}
Comparando Variáveis:
#include <bits/stdc++.h>
using namespace std;
int main(){
pair<int, int> v1, v2;
v1 = {3, 1};
v2 = {2, 2};
if(v1 > v2) cout<< "v1 é maior que v2";
else cout<< "v1 é menor ou igual a v2";
return 0;
}
Iterators
Iterators são tipos específicos de ponteiros que referenciam endereçoos de memória de objetos e contêiners STL.
Exemplo 1
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> v = {1, 2, 3, 4, 5};
vector<int>::iterator ptr;
cout<<"Elementos do Vetor"<<endl;
for(ptr = v.begin(); ptr != v.end(); ptr++){
cout<<(*ptr)<<endl;
}
return 0;
}
Você pode usar o auto no lugar de vector<int>::iterator
, para facilitar
Exemplo 2
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> ar = { 1, 2, 3, 4, 5 };
// Declaring iterators to a vector
vector<int>::iterator ptr = ar.begin();
vector<int>::iterator ftr = ar.end();
// Using next() to return new iterator
// points to 4
auto it = next(ptr, 3);
// Using prev() to return new iterator
// points to 3
auto it1 = prev(ftr, 3);
// Displaying iterator position
cout << "The position of new iterator using next() is : ";
cout << *it << " ";
cout << endl;
// Displaying iterator position
cout << "The position of new iterator using prev() is : ";
cout << *it1 << " ";
cout << endl;
// The position of new iterator using next() is : 4
// The position of new iterator using prev() is : 3
}