Vector Classe
Vector Classe
2
Classe vector: Introdução
• Definição de um vector com determinado tamanho
• Elementos podem ser acedidos 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]
}
• 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
– *it // elemento do vector referenciado por iterador
– it++ // incrementa iterador; aponta para próximo elemento
4
Classe vector: Introdução
void teste_vector() {
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]);
6
Alocação Dinâmica de Memória
• Criação dinâmica de objectos : operador new
• Libertação de memória: operador delete
– Se não se usar delete, espaço ocupado só é libertado no final do
programa
– não há “garbage collection” (ao contrário do que acontece, por exemplo,
em Java)
– delete só pode ser usado em objectos que tenham sido criados com
new
• Objecto referenciado por mais que um apontador
8
Arrays Primitivos: Crescimento
int *leArray(int &numEls) {
int tam=0; numEls=0;
int valorEnt;
int *arrayN=NULL;
cout << “Escreva valores inteiros: “;
while (cin >> valorEnt) {
if (numEls==tam) {
int *original = arrayN;
arrayN = new int[tam*2+1];
for (int i=0; i<tam; i++)
arrayN[i] = original[i];
delete [] original;
tam = tam*2+1;
}
arrayN[numEls++] = valorEnt; }
return arrayN;
}
9
v1 = leArray(n);
for (int i=0; i<n; i++)
cout << “v1[“ << i <<”] = “ << v1[i] << endl;
...
delete[] v1;
...
return 0;
}
10
vector : Aumento da Capacidade
• Redimensiona vector usando método resize(int)
11
12
vector : Teste de Crescimento Dinâmico
int main() {
vector<int> v1;
leArray(v1);
for (int i=0; i<v1.size(); i++)
cout << “v1[“ << i << ”] = “ << v1[i] << endl;
return 0;
}
13
14
vector: Atribuição, Pesquisa e Troca
• 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
15
vector: 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 << "Máximo 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 << "Máximo 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 << "Máximo Tamanho do MeuVector: " << meuVector.max_size() << endl;
cout << "Capacidade de MeuVector: " << meuVector.capacity() << endl;
} 16
vector: Exemplo
Tamanho do MeuVector: 1
Máximo Tamanho do MeuVector: 1073741823
Capacidade de MeuVector: 1
Tamanho do MeuVector: 1
Máximo Tamanho do MeuVector: 1073741823
Capacidade de MeuVector: 1000
Depois de Resize para 2000 elementos:
17
Construtores de vector
• ~vector(); //destrutor
18
Operadores em Vectors
• TYPE& operator[]( size_type index ); //examina elementos individuais
• const TYPE& operator[]( size_type index ) const;
• vector operator=(const vector& c2);
• bool operator==(const vector& c1, const vector& c2);
• bool operator!=(const vector& c1, const vector& c2);
// vectores são iguais se tamanho é igual e cada membro em cada localização é igual
19
Métodos em Vectores
• assign //assign elements to a vector
• at //returns an element at a specific location
• back //returns a reference to last element of a vector
• begin //returns an iterator to the beginning of the vector
• capacity //returns the number of elements that the vector can hold
• clear //removes all elements from the vector
• empty //true if the vector has no elements
• end //returns an iterator just past the last element of a vector
• erase //removes elements from a vector
• front //returns a reference to the first element of a vector
• insert //inserts elements into the vector
20
Métodos em Vectores
• max_size //returns the maximum number of elements that the vector can hold
• pop_back //removes the last element of a vector