Sdílet prostřednictvím


Matice (C++)

Pole je kolekce jako objekty.Nejjednodušším případě matice je vektor může být prohlášena za následující sekvence:

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

1.Specifikátor deklarace:

  • Volitelné úložiště tříd:.

  • Volitelný const a volatile specifikátory.

  • Název typu prvky pole.

2.Declarator:

  • Identifikátor.

  • Konstantní výraz uzavřený v hranatých závorkách, typu nedílnou []. Více dimenzí jsou deklarovány pomocí další závorky, konstantní výraz upustit na první sadě závorky.

  • Další volitelné hranaté závorky ohraničující konstantní výrazy.

3.Volitelné inicializátor.Viz Inicializátory.

Počet prvků pole je dána konstantní výraz.První prvek pole je 0-té prvku a je poslední prvek (n-1) prvek, kde n je počet prvků pole může obsahovat.Konstantní výraz musí být integrálního typu a musí být větší než 0.Pole o velikosti nula je právní pouze pole v posledním poli struct nebo unie a jsou-li povolena rozšíření Microsoft (/Ze).

Následující příklad ukazuje, jak definovat pole za běhu:

// 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;
}

Odvozené typy polí a proto lze zkonstruovat z jiných odvozená nebo základní typ kromě funkce, odkazy, a void.

Pole, které jsou vyrobeny z jiných polí jsou vícedimenzionální pole.Tyto vícedimenzionální pole jsou určeny umístěním více závorkách konstantní výrazy v posloupnosti.Zvažte například toto prohlášení:

int i2[5][7];

Určuje pole typu int, koncepčně uspořádány dvourozměrná matice pět řádků a sloupců sedm, jak ukazuje následující obrázek:

Koncepční rozložení vícedimenzionální pole

Konceptuální rozložení vícerozměrného pole

V prohlášení multidimensioned matice, které seznam inicializátor (jak je popsáno v Inicializátory), konstantní výraz, který určuje hranice první dimenze lze vynechat.Příklad:

// 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 }
};

Předchozí prohlášení definuje tři řádků a sloupců čtyři pole.Řádky představují továrny a sloupce představují trhy, které dodávají továren.Hodnoty jsou přepravní náklady z továren na trhy.První dimenze matice je vynecháno, ale kompilátor vyplní jeho porovnáním inicializátor.

Témata v tomto oddílu:

Příklad

Technika vynechání specifikaci hranice první dimenze vícedimenzionální pole lze také do deklarace funkce takto:

// 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;
}
  

Komentáře

Funkce FindMinToMkt je zapsán, přidání nové továrny nevyžaduje žádné změny kódu právě recompilation.

Viz také

Referenční dokumentace

Abstraktní C++ Declarators