Matrizes em C++ | Declarar | Inicializar | Exemplos de ponteiro para array

O que é uma Matriz?

Uma matriz é uma estrutura de dados que armazena um elemento do mesmo tipo de dados sequencialmente. UM C++ array tem um tamanho fixo.

Você pode ver um array como uma coleção de variáveis ​​de um tipo de dados semelhante. Em vez de declarar cada variável e atribuir-lhe um valor individualmente, você pode declarar uma variável (o array) e adicionar a ela os valores das diversas variáveis. Cada valor adicionado ao array é identificado por um índice.

Por que precisamos de matrizes?

Arrays são muito importantes em qualquer linguagem de programação. Eles fornecem uma maneira mais conveniente de armazenar variáveis ​​ou uma coleção de dados de um tipo de dados semelhante juntos, em vez de armazená-los separadamente. Cada valor do array será acessado separadamente.

Declare um array em C++

Declaração de matriz em C++ envolve indicar o tipo e também o número de elementos a serem armazenados pelo array. Sintaxe:

type array-Name [ array-Size ];

Regras para declarar um array unidimensional em C++.

  • Tipo: O tipo é o tipo de elementos a serem armazenados no array e deve ser um valor válido C++ tipo de dados.
  • Nome da matriz: O array-Name é o nome a ser atribuído ao array.
  • Tamanho da matriz: O array-Size é o número de elementos a serem armazenados no array. Deve ser um número inteiro e maior que 0.

Por exemplo, você pode criar uma matriz chamada idade e armazenar as idades de 5 alunos da seguinte forma:

int age[5];

A matriz age armazenará 5 inteiros representando as idades de diferentes alunos.

Inicialização de Array

A inicialização do array é o processo de atribuir/armazenar elementos a um array. A inicialização pode ser feita em uma única instrução ou uma por uma. Observe que o primeiro elemento de um array é armazenado no índice 0, enquanto o último elemento é armazenado no índice n-1, onde n é o número total de elementos no array.

No caso do array age, o primeiro elemento será armazenado no índice 0, enquanto o último elemento será armazenado no índice 4.

Vamos usar o array age para demonstrar como a inicialização do array pode ser feita:

int age[5] = {19, 18, 21, 20, 17};

O número total de elementos em { } não pode exceder o valor indicado em [ ]. O elemento 19 está no índice 0, 18 no índice 1, 21 no índice 2, 20 no índice 3 e 17 no índice 4. Se você não indicar o número de elementos a serem armazenados na matriz dentro de [], a matriz será grande o suficiente apenas para conter os elementos adicionados em { }. Por exemplo:

int age[] = {19, 18, 21, 20, 17};

A instrução acima criará exatamente o mesmo array que o anterior. Você também pode atribuir um elemento a um array usando seu índice. Por exemplo:

age[3] = 20;

A instrução acima armazenará o valor 20 no índice 3 do array denominado idade. Isso significa que 20 serão os 4th elemento da matriz.

Tipos de matrizes

Existem dois tipos de C++ matrizes:

  • Matriz unidimensional
  • Matriz multidimensional
  • Ponteiro para um array

Matriz Unidimensional

Esta é uma matriz na qual os itens de dados são organizados linearmente em apenas uma dimensão. É comumente chamado de array 1-D. Sintaxe:

datatype array-name[size];
  • O nome do array é o nome do array.
  • O tamanho é o número de itens a serem armazenados na matriz.

Por exemplo:

#include <iostream>
using namespace std;

int main()
{
	int age[5] = { 19, 18, 21, 20, 17 };
	for (int x = 0; x < 5; x++)
	{
		cout <<age[x]<<"\n";
	}
}

Saída:

Matriz Unidimensional

Aqui está uma captura de tela do código:

Matriz Unidimensional

Explicação do código:

  1. Incluindo o arquivo de cabeçalho iostream em nosso código. Isso nos permitirá ler e escrever no console.
  2. Incluindo o namespace std para usar suas classes e funções sem chamá-lo.
  3. Chamando a função main() dentro da qual deve ser adicionada a lógica do programa.
  4. Início do corpo da função main().
  5. Declarando um array chamado idade para armazenar 5 inteiros. Os 5 inteiros também foram inicializados.
  6. Crie uma variável inteira x usando um loop for.
  7. O início do corpo do loop for.
  8. Usando a variável de loop x para iterar sobre os valores do array age e imprimi-los no console. O “\n” é um caractere de nova linha e é impresso em uma nova linha após cada iteração.
  9. Fim do corpo do para laço.
  10. Fim do corpo da função main().

Matriz multidimensional

Esta é uma matriz na qual os itens de dados são organizados para formar uma matriz de matrizes. Uma matriz multidimensional pode ter qualquer número de dimensões, mas matrizes bidimensionais e tridimensionais são comuns. Sintaxe:

datatype array-name[d1][d2][d3]...[dn];

O nome do array é o nome do array que terá n dimensões. Por exemplo:

Matriz Bidimensional

Uma matriz 2D armazena dados em uma lista com matriz 1-D. É uma matriz com linhas e colunas. Para declarar um array 2D, use a seguinte sintaxe:

type array-Name [ x ][ y ];

O tipo deve ser válido C++ tipo de dados. Veja uma matriz 2D como uma tabela, onde x denota o número de linhas enquanto y denota o número de colunas. Isso significa que você identifica cada elemento em uma matriz 2D usando a forma a[x][y], onde x é o número de linhas e y o número de colunas às quais o elemento pertence.

Aqui está um exemplo de como inicializar um array 2D:

int a[2][3] = {  
   {0, 2, 1} ,   /*  row at index 0 */
   {4, 3, 7} ,   /*  row at index 1 */
   };

No exemplo acima, temos um array 2D que pode ser visto como uma matriz 2×3. Existem 2 linhas e 3 colunas. O elemento 0 pode ser acessado como a[0][1] porque está localizado na interseção da linha indexada 0 e da coluna indexada 1. O elemento 3 pode ser acessado como a[1][2] porque está localizado no intersecção da linha indexada 1 e coluna indexada 2.

Observe que simplesmente adicionamos chaves para diferenciar as diferentes linhas de elementos. A inicialização também poderia ter sido feita da seguinte forma:

int a[2][3] = {0, 2, 1, 4, 3, 7};
   };

Os seguintes C++ exemplo demonstra como inicializar e percorrer uma matriz 2D:

#include <iostream>
using namespace std;
int main() 
{
	// a 2x3 array
	int a[3][2] = { {0, 2}, {1, 4}, {3, 7} };

	// traverse array elements

	for (int i=0; i<3; i++)
		for (int j=0; j<2; j++) 
		
		{
			cout << "a[" <<i<< "][" <<j<< "]: ";
			cout << a[i][j] << endl;
		}
	return 0;
}

Saída:

Matriz Bidimensional

Aqui está uma captura de tela do código acima:

Matriz Bidimensional

Explicação do código:

  1. Incluindo o arquivo de cabeçalho iostream em nosso código. Isso nos permitirá ler e escrever no console.
  2. Incluindo o namespace std para usar suas classes e funções sem chamá-lo.
  3. Chamando a função main() dentro da qual o código deve ser adicionado.
  4. Início do corpo da função main().
  5. Um comentário. O C++ o compilador irá pular isso.
  6. Declarando um array 2D de 3 linhas e 2 colunas. Itens também foram adicionados ao array.
  7. Um comentário. O C++ o compilador irá pular isso.
  8. Criando uma variável i usando um loop for. Esta variável irá iterar sobre os índices de linha da matriz.
  9. Criando uma variável j usando um loop for. Esta variável irá iterar sobre os índices das colunas da matriz.
  10. Início do corpo dos loops.
  11. Imprima os valores das variáveis ​​i e j no console entre colchetes no console.
  12. Imprima o valor armazenado no índice [i][j] do array a.
  13. Fim do corpo dos loops.
  14. A função main() deve retornar um valor inteiro se o programa funcionar bem.
  15. Fim do corpo da função main().

Matriz Tridimensional

Uma matriz 3D é uma matriz de matrizes. Cada elemento em um array 3D é identificado por um conjunto de 3 índices. Para acessar os elementos de um array 3D, usamos três loops for. Por exemplo:

#include<iostream>
using namespace std;
void main()
{
	int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}};
	cout << "a[0][1][0] = " << a[0][1][0] << "\n";
	cout << "a[0][1][1] = " << a[0][1][1] << "\n";
}

Saída:

Matriz Tridimensional

Aqui está uma captura de tela do código:

Matriz Tridimensional

Explicação do código:

  1. Incluindo o arquivo de cabeçalho iostream em nosso código. Isso nos permitirá ler e escrever no console.
  2. Incluindo o namespace std para usar suas classes e funções sem chamá-lo.
  3. Chamando a função main() dentro da qual deve ser adicionada a lógica do programa.
  4. Início do corpo da função main().
  5. Declarando um array 3D denominado an de tamanho 2x3x2. Os valores da matriz também foram inicializados.
  6. Acessando o item armazenado no índice [0][1][0] do array e imprimindo-o no console.
  7. Acessando o item armazenado no índice [0][1][1] do array e imprimindo-o no console.
  8. Fim do corpo da função main().

Ponteiro para um array

A apontador é uma variável que contém um endereço. Além de usar um ponteiro para armazenar o endereço de uma variável, podemos usá-lo para armazenar o endereço de uma célula do array. O nome de um array aponta constantemente para seu primeiro elemento. Considere a declaração abaixo:

int age[5];

A idade é um ponteiro para $idade[0], o endereço do primeiro elemento de uma matriz chamada idade. Considere o seguinte exemplo:

#include <iostream>
using namespace std;
int main()
{
	int *john;

	int age[5] = { 19, 18, 21, 20, 17 };

	john = age;

	cout << john << "\n";

	cout << *john;
	
}

Saída:

Ponteiro para um array

Observe que o primeiro valor da saída acima pode retornar um valor diferente dependendo do endereço atribuído ao primeiro elemento do array na memória do seu computador.

Aqui está uma captura de tela do código:

Ponteiro para um array

Explicação do código:

  1. Incluindo o arquivo de cabeçalho iostream em nosso código. Isso nos permitirá ler e escrever no console.
  2. Incluindo o namespace std para usar suas classes e funções sem chamá-lo.
  3. Chamando a função main() dentro da qual deve ser adicionada a lógica do programa.
  4. Início do corpo da função main().
  5. Declarando uma variável de ponteiro chamada *john.
  6. Declarando uma matriz de inteiros chamada idade para armazenar 5 inteiros. Os valores dos inteiros também foram inicializados.
  7. Atribuindo à variável john o valor do endereço do item armazenado no primeiro índice do array age.
  8. Imprimindo o valor da variável john, que é o endereço do item armazenado no primeiro índice do array age.
  9. Imprimindo o primeiro valor armazenado no array age.
  10. Fim do corpo da função main().

Os nomes dos arrays podem ser usados ​​como ponteiros constantes, e vice-versa também é verdadeiro. Isso significa que você pode acessar o valor armazenado no índice 3 do array age com *(age + 3). Por exemplo:

#include <iostream>
using namespace std;

int main() {
	// an array of 5 elements.
	int age[5] = { 19, 18, 21, 20, 17 };
	int *p;

	p = age;

	// output array values

	cout << "Using pointer: " << endl;

	for (int x=0; x<5; x++) {
		cout << "*(p + " << x << ") : ";
		cout << *(p + x) << endl;
	}
	cout << "Using age as address: " << endl;

	for (int x = 0; x < 5; x++) {
		cout << "*(age + " << x << ") : ";
		cout << *(age + x) << endl;
	}

	return 0;
}

Saída:

Ponteiro para um array

Aqui está uma captura de tela do código:

Ponteiro para um array

Explicação do código:

  1. Incluindo o arquivo de cabeçalho iostream em nosso código. Isso nos permitirá ler e escrever no console.
  2. Incluindo o namespace std para usar suas classes e funções sem chamá-lo.
  3. Chamando a função main() e início do corpo da função main().
  4. Um comentário. O C++ o compilador irá pular isso.
  5. Declarando um array chamado idade para armazenar 5 inteiros.
  6. Criando um ponteiro inteiro p.
  7. Atribuindo p o valor do endereço do primeiro elemento do array age.
  8. Um comentário. O C++ o compilador irá pular isso.
  9. Imprima algum texto no console.
  10. Crie um inteiro x usando um loop for. O { marca o início do corpo do loop for.
  11. Imprima os valores de x combinados com algum outro texto no console.
  12. Imprima os valores de *(p + x) no console.
  13. Fim do corpo do loop for.
  14. Imprima algum texto no console.
  15. Crie uma variável x usando um loop for. O { marca o início do corpo do loop for.
  16. Imprima os valores de x de 0 a 4 junto com algum outro texto.
  17. Imprima os valores de *(idade + x).
  18. Fim do corpo do loop for.
  19. Valor de retorno se o programa for executado com sucesso.
  20. Fim do corpo da função main().

Acessando os valores de um Array

Os elementos de um array são acessados ​​usando seus respectivos índices. O índice do elemento a ser acessado é adicionado entre colchetes [ ] imediatamente após o nome do array. Por exemplo:

int john = age[2];

No exemplo acima, estamos simplesmente afirmando que a idade de John está armazenada no índice 2 do array denominado idade. Isso significa que a idade de John é 3rd valor na idade da matriz. Aqui está um completo C++ exemplo que mostra como acessar e imprimir este valor:

#include<iostream>
using namespace std;
int main()
{
	int age[5] = { 19, 18, 21, 20, 17 };
	int john = age[2];
	cout << "The age of John is:"<<john;
}

Saída:

Acessando os valores de um Array

Aqui está uma captura de tela do código:

Acessando os valores de um Array

Explicação do código:

  1. Incluindo o arquivo de cabeçalho iostream em nosso código. Isso nos permitirá ler e escrever no console.
  2. Incluindo o namespace std para usar suas classes e funções sem chamá-lo.
  3. Chamando a função main() dentro da qual o código deve ser adicionado.
  4. Início de um corpo da função main().
  5. Declarando um array chamado age para armazenar 5 elementos inteiros.
  6. Acessando o valor armazenado no índice 2 do array age e armazenando seu valor em uma variável chamada john.
  7. Imprimindo o valor da variável john no console junto com outro texto.

Vantagens de um Array em C++

Aqui estão os prós/benefícios de usar Array em C++:

  • Os elementos da matriz podem ser percorridos facilmente.
  • Fácil de manipular dados de array.
  • Os elementos do array podem ser acessados ​​aleatoriamente.
  • Arrays facilitam a otimização do código; portanto, podemos realizar muito trabalho usando menos código.
  • Fácil de classificar dados de array.

Desvantagens de um array em C++

  • Uma matriz possui um tamanho fixo; portanto, não podemos adicionar novos elementos a ele após a inicialização.
  • Alocar mais memória do que o necessário leva ao desperdício de espaço de memória e menos alocação de memória pode criar um problema.
  • O número de elementos a serem armazenados em um array deve ser conhecido antecipadamente.

Resumo

  • Uma matriz é uma estrutura de dados que armazena elementos do mesmo tipo de dados.
  • Os elementos da matriz são armazenados sequencialmente.
  • Os elementos da matriz são denotados usando seus respectivos índices. O primeiro elemento está no índice 0, enquanto o último elemento está no índice n-1, onde é o número total de elementos do array.
  • A declaração de um array envolve a definição dos tipos de dados dos elementos do array, bem como o número de elementos a serem armazenados no array.
  • Uma matriz unidimensional armazena elementos sequencialmente.
  • Uma matriz bidimensional armazena elementos em linhas e colunas.
  • Uma matriz tridimensional é uma matriz de matrizes.
  • Os elementos podem ser adicionados a um array usando seus índices.
  • Os elementos do array são acessados ​​usando seus índices.
  • Uma matriz multidimensional possui mais de uma dimensão.
  • O nome do array aponta para seu primeiro elemento.
  • Os arrays têm um tamanho fixo, o que significa que novos elementos não podem ser adicionados ao array após sua inicialização.