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.
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;