Você está na página 1de 15

Linguagem de Programação

Classe Vector

• A classe vector é uma alternativa à representação de array primitivo


• Template de classe
– necessário especificar o tipo dos elementos
– vector<int> vx;
• Necessário incluir a biblioteca “vector.h”
– #include <vector>
• Alguns métodos
– vx.size(); // retorna tamanho do vector vx
– vx.empty(); // determina se vector vx está vazio
– vx.resize(novo_tamanho); // redimensiona vector vx
– vx2=vx; // cópia de vectores

2
Classe Vector
• Definição de um vetor com determinado tamanho
• Elementos podem ser acessado através de índice

void copia() {
const int tam=10;
vector<int> v1(tam);
int v2[tam];
...
for (int i=0; i<tam; i++)
v2[i]=v1[i]
}

• Elementos são inicializados com valor padrão do tipo. Pode-se


atribuir um valor inicial:
– vector<int> v1(10,-1); // v1 contém 10 elementos do tipo
// inteiro inicializados com o valor -1

3
Classe Vector
• Definição de um vetor sem tamanho (vazio)
– vector<int> vy;
• Inserir um elemento
– vy.push_back(x); // insere x no fim do vector
– vy.pop_back(x2); // retira x2 do fim do vector
• Uso de iterador
– iterator it;
– it = vy.begin(); // aponta para 1º elemento
– it = vy.end(); // aponta para último elemento

• Tamanho: nº de elementos do vector


– vy.size(); // tamanho (nº elementos) do vetor

4
Classe Vector

• Inserir em qualquer posição do vetor vx


– vx.insert(it, el); // insere el na posição referenciada
// pelo iterator it
– vx.insert(it, it1OV, it2OV); // insere elementos de
// outro vetor com inicio em
// iterator it1OV e fim it2OV
• Eliminar elementos
– vx.erase(it); // elimina elemento referenciado por iterador it
– vx.erase(itIni, itFim); // elimina elementos entre os
// iteradores itIni e itFim

5
Exemplo
#include <iostream>
#include <vector>

using namespace std;

int main()
{
const int tam=7;
vector<int> v1;
int v2[tam] = {0,1,1,2,3,5,8}; // Inicialização de array
// primitivo
for (int i=0; i<tam; i++)
v1.push_back(v2[i]);
cout << "conteúdo do vector v1 : \n";
for (vector<int>::iterator it = v1.begin();it != v1.end(); it++)
{
cout << *it << " "; // valor na posição apontada por it
}
cout << endl;

system("PAUSE");
return 0;
} 6
Classe Vector

• Atribuição e troca
– vx = vy; // elementos de vector vy são copiados para vx
// vx é redimensionado
– vx.swap(vy); // elementos de vx e vy são trocados
• Algoritmos genéricos de pesquisa e cópia
– it = find(itIni, itFim, el);
// procura el entre iteradores itIni e itFim
– copy(itIni, itFim, it);
// copia elementos entre iteradores itIni e itFim
// para a posição it.

7
Exemplo
#include <iostream>
#include <vector>
using namespace std;

int main()
{
std::vector<int> meuVetor; // cria um vetor de inteiros vazio

if (meuVetor.empty()) // testa se o vetor está vazio


cout << "Vetor vazio!" << endl;
else
cout << "Vetor com elementos!" << endl;

meuVetor.push_back(7); // inclue no fim do vetor um elemento


meuVetor.push_back(9);
meuVetor.push_back(2018);

// vai imprimir três elementos {7, 9, 2018}


for (int i = 0; i < meuVetor.size(); i++)
cout << "Imprimindo o vetor...: " << meuVetor[i] << endl;

cout << endl;


meuVetor.pop_back(); // retira o último elemento

// agora, só vai imprimir dois {7, 9}


for (int i = 0; i < meuVetor.size(); i++)
cout << "Meu vetor, de novo...: " << meuVetor[i] << endl;

system("PAUSE");
return 0;
}
8
Exemplo
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> meuVector; // Novo Vector com 0 elementos
meuVector.push_back(42); // Adicionar elemento 42 no fim do vector
// Mostrar estatísticas do vector.
cout << "Tamanho do MeuVector: " << meuVector.size() << endl;
cout << "Maximo Tamanho do MeuVector: " << meuVector.max_size() << endl;
cout << "Capacidade de MeuVector: " << meuVector.capacity() << endl;
// Assegurar que tem espaço para pelo menos 1000 elementos.
meuVector.reserve(1000);
cout << endl << "Depois de reservar espaço para 1000 elementos:" << endl;
cout << "Tamanho do MeuVector: " << meuVector.size() << endl;
cout << "Maximo Tamanho do MeuVector: " << meuVector.max_size() << endl;
cout << "Capacidade de MeuVector: " << meuVector.capacity() << endl;
// Garantir que tem espaço para pelo menos 2000 elementos.
meuVector.resize(2000);
cout << endl << "Depois de Resize para 2000 elementos:" << endl;
cout << "Tamanho do MeuVector: " << meuVector.size() << endl;
cout << "Maximo Tamanho do MeuVector: " << meuVector.max_size() << endl;
cout << "Capacidade de MeuVector: " << meuVector.capacity() << endl;

system("pause");

return 0; 9
}
Exemplo: Percorrer os elementos de um vector usando um iterador
#include <iostream>
#include <vector>
using namespace std;

int main()
{
std::vector<int> meuVetor; // cria um vetor de inteiros vazio
std::vector<int>::iterator j;

meuVetor.push_back(7); // inclue no fim do vetor um elemento


meuVetor.push_back(9);
meuVetor.push_back(2018);
// vai imprimir três elementos {7, 9, 2018}
for ( j = meuVetor.begin(); j != meuVetor.end(); j++ )
cout << "Imprimindo o vetor...: " << *j << endl;
cout << endl;
// insere 55 como segundo elemento, deslocando os demais para a próxima posição
meuVetor.insert( meuVetor.begin() + 1, 55);
// agora, imprimir quatro elementos {7, 55, 9, 2018}
for ( j = meuVetor.begin(); j != meuVetor.end(); j++ )
cout << "Inseri no meio do vetor..: " << *j << endl;
// retira 11 da lista (terceira posição)
meuVetor.erase( meuVetor.begin() + 2);
// agora, tem que imprimir três de novo {7, 55, 2018}
for ( j = meuVetor.begin(); j != meuVetor.end(); j++ )
cout << "Retirei no meio do vetor..: " << *j << endl;

meuVetor.clear(); // limpa todo o vetor

system("PAUSE");
return 0;
} 1
0
Exemplo: Para ordenar um VECTOR com tipos primitivos como int, float, char e double, use a
função sort
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
vector <float> V;

V.push_back(-4);
V.push_back(4);
V.push_back(-9);
V.push_back(-12);
V.push_back(40);

cout << "IMPRIMINDO..." << endl;


for (int i=0;i<V.size();i++)
cout << V[i] << endl;

sort (V.begin(), V.end());


cout << "IMPRIMINDO EM ORDEM..." << endl;
for (int i=0;i<V.size();i++)
cout << V[i] << endl;

cout << "Fim..." << endl;


system("PAUSE");

return 0; 1
} 1
Exemplo: Para armazenar objetos de uma classe Pessoa em um vector

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <string> int main(){

class Pessoa { vector <Pessoa> VP;


string nome; vector <Pessoa>::iterator ptr;
int idade;
public: VP.push_back(Pessoa("Joao", 25));
Pessoa(string no, int id) VP.push_back(Pessoa("Maria", 32));
{ idade = id; VP.push_back(Pessoa("Carla", 4));
nome = no; VP.push_back(Pessoa("Abel", 30));
}
string getNome() // percorrendo a lista com indices
{ for(int i = 0; i < VP.size(); i++)
return nome; {
} cout << "Nome: " << VP[i].getNome();
int getIdade() cout << " - Idade: " << VP[i].getIdade() << endl;
{ }
return idade;
} system("pause");
}; return 0;
}

1
2
Exemplo: Ordenação decrescente de objetos de uma classe com base no atributo nome.
#include <iostream>
using namespace std;
#include <algorithm>
#include <vector> int main(){
#include <string>
vector <Pessoa> VP;
class Pessoa { vector <Pessoa>::iterator ptr;
string nome;
int idade; VP.push_back(Pessoa("Joao", 25));
public: VP.push_back(Pessoa("Maria", 32));
Pessoa(string no, int id) VP.push_back(Pessoa("Carla", 4));
{ VP.push_back(Pessoa("Abel", 30));
idade = id;
nome = no;
} sort ( VP.begin(), VP.end(), ordena_por_nome);
string getNome()
{ // percorrendo a lista com um ITERATOR
return nome; for(ptr = VP.begin(); ptr != VP.end(); ptr++)
} {
int getIdade() cout << "Nome: " << ptr->getNome();
{ cout << " - Idade: " << ptr->getIdade() <<
return idade; endl;
} }
}; system("pause");
bool ordena_por_nome(Pessoa A, Pessoa B) }
{
if (A.getNome() > B.getNome())
return true;
return false;
}

1
3
Exercício

1. Refaça os exercícios das aulas sobre listas usando a classe vector.


Bibliografia:
● DEITEL, H. M.; DEITEL, P. J. C++:Como Programar. 3. Ed.
Porto Alegre (RS): Bookman, 2001. 1098p
● SOUZA, M. A. F., GOMES, M. M.,SOARES, M. V., CONCILIO,
R., Algoritmos e Lógica de Programação, Editora Cengage
Learning, São Paulo, 2008.

Sergio Barbosa Villas-Boas, C / C++ e Orientação a Objetos
em Ambiente Multiplataforma

Apostila LINGUAGEM C/C++ UNIPAN - Faculdade de Ciências
Aplicadas de Cascavel – FACIAP Curso de Ciência da
Computação, Cascavel - PR, 2004

Estrutura de Dados com Algoritmos e C, Marcos
Laureano, Editora: Brasport Livros e Multimídia Ltda,
2008.
15

Você também pode gostar