View on GitHub

Maratona-Extensao

Vetores - Material Extra

Declaração de um vetor

int v[10]; //aloca um vetor de inteiros com 10 posições
vector<int> v; //aloca um vetor de inteiros
vector<int> v(10); //aloca um vetor de inteiros com 10 posições inicializadas em 0

Inicializando um vetor

vector<int> a = {5, 6, 7};
vector<double> b = {3.14, 1.7, 9.8};
vector<string> c = {"Gui", "Duda", "Vick", "Gio", "Tong", "Duda Holanda", "Ligoski", "Victor"};

Podemos também inicializar um vetor com todas as posições preenchidas dado um número

vector<int> a(10); // inicializamos o vetor com 10 posições todas valendo 0
vector<int> b(10, -1); // inicializamos o vetor com 10 posições todas valendo -1
vector<double> c(3, 3.1415); // inicializamos o vetor com 3 posições todas valendo 3.1415

Como ler um vetor

Podemos ler um vetor do usuario com o cin ou o scanf da seguinte forma:

int n = 6;
vector<int> v(n); 
// inicializamos o vetor com 6 posições todas valendo 0

//lendo com scanf
for (int i = 0; i < n; i++)
    scanf("%d", &v[i]);

//lendo com cin
for (int i = 0; i < n; i++)
    cin >> v[i];

Acessando elementos de um vetor

Para acessar os elementos de um vetor temos que passar a posição de onde ele esta, essa posição é chamada de index. A indexação de um vetor sempre começa em 0 e termina no tamanho do vetor menos 1.

Exemplo:

vector<int> v = {1, 2, 3}; //inicializando um vetor com 3 inteiros
// a indexação de v vai de 0 a 2 (tamanho do vetor que é 3 menos 1)
cout << v[0] << " "; // acessando o index 0 do vetor, exibimos na tela o número 1
cout << v[1] << " "; // acessando o index 1 do vetor, exibimos na tela o número 2
cout << v[2] << endl; // acessando o index 2 do vetor, exibimos na tela o número 3

Para facilitar, podemos exibir todos os elementos de um vetor na tela usando um laço for. Utilizamos a função size() como condição de parada do for.

vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //inicializando um vetor com 10 inteiros
for (int i = 0; i < v.size(); i++)
    cout << v[i] << " ";
cout << endl;

Para vizualização declaramos um vetor de 10 posições v[10] e rodamos um laço for para exibir na tela cada elemento do vetor. Para execução do código clique no link abaixo e clique no botão next para ir passo a passo no código.

💻 Código 01

Swap

Para fazer uma troca entre duas posições no vetor é preciso de uma variável auxiliar, caso o contrario o dado vai ser perdido.

Jeito errado de fazer um swap

vector<int> v = {1, 2};
// queremos que o 2 fique no index 0 do vetor e o 1 fique no index 1 do vetor
v[0] = v[1];
v[1] = v[0];
cout << v[0] << " " << v[1] << endl;
//aqui v[0] e v[1] estão com o número 2, pois o número 1 foi perdido na primeira troca

Jeito certo de fazer um swap

vector<int> v = {1, 2};
int aux = v[0]; // salvamos em uma variavel auxiliar o valor de v[0]
v[0] = v[1]; // trocamos o v[0] pelo v[1]
v[1] = aux; // trocamos o v[1] pela aux que contém o valor que tinha em v[0]
cout << v[0] << " " << v[1] << endl;

Jeito roubado utilizando a função swap do c++

vector<int> v = {1, 2};
swap(v[0], v[1]);
cout << v[0] << " " << v[1] << endl;

Ordenando um vetor

Em ordem crescente

#include <bits/stdc++.h>

using namespace std;

int main()
{
    vector<int> v = {5, 4, 3, 2, 1};
    sort(v.begin(), v.end());

    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";

    return 0;
}

Em ordem decrescente

#include <bits/stdc++.h>

using namespace std;

int main()
{
    vector<int> v = {1, 2, 3, 4, 5};
    sort(v.begin(), v.end(), greater<int>());

    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";

    return 0;
}

Métodos úteis da classe vector

size() Retorna o número de elementos no vetor.

vector<int> vetor = {1, 2, 3};
cout << vetor.size() << endl;

push_back(elemento) Adiciona um elemento ao final do vetor.

vector<int> vetor;
vetor.push_back(2);
cout << vetor.size() << endl;

pop_back() Exclui o elemento no final do vetor.

vector<int> vetor;
vetor.push_back(2);
vetor.pop_back();
cout << vetor.size() << endl;

clear() Apaga os elementos do vetor.

vector<int> vetor;
vetor.push_back(2);
vetor.push_back(5);
vetor.clear();
cout << vetor.size() << endl;

empty() Retorna true se o vetor está vazio ou false se o vetor não estiver vazio.

vector<int> vetor;
vetor.push_back(2);
if (vetor.empty())
    cout << "O vetor esta vazio" << endl;
else
    cout << "O vetor não esta vazio" << endl;