Subsecções de Declarações

Capítulo 3

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;
}
Capítulo 4

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;
    }
}
Informação

O método size() retorna a quantidade de elementos existentes em um vector. Complexidade: O(1)

Ordenar

Complexidade

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

Complexidade

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
}
Capítulo 5

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;
}
Capítulo 6

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;
}
Dica

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 
}