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
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.