Arrays (C++)

Uma matriz é uma coleção de objetos semelhantes.Caso mais simples de uma matriz é um vetor, que pode ser declarado com a seguinte seqüência:

decl-specifier identifier [ constant-expression ]
decl-specifier identifier []
decl-specifier identifer [][ constant-expression] . . .
decl-specifier identifier [ constant-expression ]
[ constant-expression ] . . .

1.O especificador de declaração:

  • Um especificador de classe de armazenamento opcional.

  • Opcional const e/ou volatile especificadores.

  • O nome do tipo dos elementos da matriz.

2.O Declarador:

  • O identificador.

  • Uma expressão de constante de tipo integral entre colchetes, []. Se várias dimensões são declaradas usando colchetes adicionais, a expressão de constante pode ser omitido no primeiro conjunto de colchetes.

  • Opcionais suportes adicionais incluindo expressões de constantes.

3.Um inicializador opcional.Consulte inicializadores de.

O número de elementos na matriz é fornecido pela expressão constante.O primeiro elemento na matriz é o elemento 0º e o último elemento é o (n-1) elemento, onde n é o número de elementos de matriz pode conter.O expressão de constante deve ser do tipo integral e deve ser maior que 0.Uma matriz de tamanho zero é válida somente quando a matriz é o último campo em um struct ou união e quando as extensões do Microsoft (/Ze) estão habilitadas.

O exemplo a seguir mostra como definir uma matriz em tempo de execução:

// arrays.cpp
// compile with: /EHsc
#include <iostream>

int main() {
   using namespace std;
   int size = 3, i = 0;

   int* myarr = new int[size];

   for (i = 0 ; i < size ; i++)
      myarr[i] = 10;

   for (i = 0 ; i < size ; i++)
      printf_s("myarr[%d] = %d\n", i, myarr[i]);

   delete [] myarr;
}

Arrays são tipos derivados e, portanto, pode ser construídos a partir de qualquer outro tipo derivado ou fundamental, exceto de funções, referências, e void.

Construído a partir de outras matrizes de matrizes são matrizes multidimensionais.Essas matrizes multidimensionais são especificados, colocando várias expressões de constantes entre colchetes em seqüência.Por exemplo, considere essa declaração:

int i2[5][7];

Ele especifica uma matriz do tipo int, conceitualmente organizados em uma matriz bidimensional de cinco linhas e colunas de sete, conforme mostrado na figura a seguir:

Layout conceitual de matriz multidimensional

Layout conceitual de matriz Multidimensional

Em declarações de matrizes de multidimensioned que possuírem uma lista do inicializador (conforme descrito em inicializadores de), a expressão de constante que especifica os limites para a primeira dimensão pode ser omitida.Por exemplo:

// arrays2.cpp
// compile with: /c
const int cMarkets = 4;
// Declare a float that represents the transportation costs.
double TransportCosts[][cMarkets] = { 
   { 32.19, 47.29, 31.99, 19.11 },
   { 11.29, 22.49, 33.47, 17.29 },
   { 41.97, 22.09,  9.76, 22.55 }
};

Declaração precedente define uma matriz que é três linhas por quatro colunas.As linhas representam as fábricas e as colunas representam os mercados aos quais as fábricas são fornecidos.Os valores são os custos de transporte das fábricas para os mercados.A primeira dimensão da matriz será deixada de fora, mas o compilador preenche ele examinando o inicializador.

Tópicos nesta seção:

Exemplo

A técnica de omissão a especificação de limites para a primeira dimensão de uma matriz multidimensional também pode ser usada nas declarações de função da seguinte maneira:

// multidimensional_arrays.cpp
// compile with: /EHsc
// arguments: 3
#include <limits>   // Includes DBL_MAX
#include <iostream>

const int cMkts = 4, cFacts = 2;

// Declare a float that represents the transportation costs
double TransportCosts[][cMkts] = { 
   { 32.19, 47.29, 31.99, 19.11 },
   { 11.29, 22.49, 33.47, 17.29 },
   { 41.97, 22.09,  9.76, 22.55 }  
};

// Calculate size of unspecified dimension
const int cFactories = sizeof TransportCosts /
                  sizeof( double[cMkts] );

double FindMinToMkt( int Mkt, double myTransportCosts[][cMkts], int mycFacts);

using namespace std;

int main( int argc, char *argv[] ) {
   double MinCost;

   if (argv[1] == 0) {
      cout << "You must specify the number of markets." << endl;
      exit(0);
   }
   MinCost = FindMinToMkt( *argv[1] - '0', TransportCosts, cFacts);
   cout << "The minimum cost to Market " << argv[1] << " is: "
       << MinCost << "\n";
}

double FindMinToMkt(int Mkt, double myTransportCosts[][cMkts], int mycFacts) {
   double MinCost = DBL_MAX;

   for( int i = 0; i < cFacts; ++i )
      MinCost = (MinCost < TransportCosts[i][Mkt]) ?
         MinCost : TransportCosts[i][Mkt];

   return MinCost;
}
  

Comentários

A função FindMinToMkt está escrito de modo que a adição de novas fábricas não requer quaisquer alterações de código, apenas uma recompilação.

Consulte também

Referência

Resumo de C++ declaradores