Baixe o app para aproveitar ainda mais
Prévia do material em texto
7.7 – Criando Matrizes Dinamicamente A linguagem C++ prima pela economia de memória durante a execução de seus programas. Quando declaramos uma matriz no início de um programa, o compilador separa um “pedaço” da memória do computador de tamanho equivalente ao tamanho máximo da matriz. Assim, se criarmos uma matriz de inteiros com 200 elementos, o compilador separa na memória do computador um espaço de 400 bytes (2 bytes x 200 elementos). Entretanto, quando trabalhamos com matrizes frequentemente não sabemos qual o tamanho exato de elementos que precisamos. Ao criar uma matriz, estipulamos um valor que seja maior do que o valor máximo de elementos que precisamos, mesmo que não utilizemos todos os espaços disponíveis na matriz. Isso causa desperdício de memória do computador e lentidão na execução de programas. Para evitar este problema, a linguagem C++ introduz dois novos operadores de controle de memória. Em primeiro lugar, temos o operador new, que é utilizado para alocar espaços na memória de computador durante a execução de um programa. Em segundo lugar, o operador delete, que libera a memória alocada com o operador new após sua utilização. Este tipo de criação e destruição de variáveis é chamado de alocação dinâmica. Uma matriz criada dessa forma é chamada de matriz dinâmica. A vantagem de se criar matrizes dinâmicas é que a memória utilizada pela matriz só é “tirada” do sistema após a execução do operador new, e pode ser liberada novamente após sua utilização com o operador delete. Quando criamos uma matriz do jeito “normal”, a memória utilizada por ela é guardada pelo programa durante toda sua execução, consumindo recursos desnecessários do computador. A sintaxe para criar-se uma matriz utilizando o operador new é a seguinte: <tipo> * <nome> = new <tipo> [ <numero de elementos> ]; Por exemplo, para criar uma matriz do tipo float com 10 elementos: float * lista = new float [10]; O acesso aos elementos da nova matriz é feito de forma análoga ao de uma matriz criada do jeito “normal”: utilizamos o nome da matriz seguido do número do elemento acessado. Como já dito anteriormente, o primeiro elemento de uma matriz é sempre o elemento 0. Note que não podemos inicializar automaticamente os valores de uma matriz criada dessa forma. Cada elemento da matriz deve ter seu valor atribuído separadamente. A outra face do operador new é o operador delete. Só podemos utilizar este operador com matrizes criadas pelo operador new, ou seja, matrizes criadas por declaração normal não podem ser apagadas durante a execução do programa. Para utilizar o operador delete para apagar uma matriz, a sintaxe é a seguinte: delete <nome>; O programa abaixo pede ao usuário o número de elementos da matriz, cria uma matriz e depois volta a pedir ao usuário os valores de cada um dos elementos da matriz. No final do programa, a matriz é deletada. #include <iostream> using namespace std; int main() { int tamanho = 0; cout<<"Entre com o tamanho da matriz: "; cin>>tamanho; cout<<endl; int *sequencia = new int[tamanho]; for (int i = 0; i < tamanho; i++) { cout << "Entre com o elemento "<<(i+1)<<" da matriz: "; cin>>sequencia[i]; cout<<endl; } cout<<"A matriz entrada e: "; for (int i = 0; i < tamanho; i++) { cout << sequencia[i]<<" "; } cout<<endl; cout<<"Programa encerrado. A matriz criada será deletada, e a memória será devolvida para o processador."; delete sequencia; system("PAUSE > null"); return 0; }
Compartilhar