Tablice (C++)
Tablica jest to zbiór jak obiekty.Najprostszy przypadek tablicy jest wektor, które mogą być zgłaszane przez następującą sekwencję:
decl-specifier identifier [ constant-expression ]
decl-specifier identifier []
decl-specifier identifer [][ constant-expression] . . .
decl-specifier identifier [ constant-expression ]
[ constant-expression ] . . .
1.Specyfikator deklaracji:
Specyfikator klasy magazynowania opcjonalne.
Opcjonalny const i/lub volatile Specyfikatory.
Nazwa Typ elementów tablicy.
2.Niewłaściwy deklarator:
Identyfikator.
Wyrażenie stałe integralną typu w nawiasach, []. Jeśli wiele wymiarów zadeklarowane za pomocą dodatkowe nawiasy, wyrażenie stałe mogą być pominięte na pierwszy zestaw nawiasów.
Opcjonalne dodatkowe nawiasy zakrywające wyrażenia stałe.
3.Opcjonalne inicjatora.Zobacz inicjatory.
Liczba elementów w tablicy jest podana przez wyrażenie stałe.Pierwszy element w tablicy jest elementem płatnooci i jest ostatnim elementem (n-1) elementu, gdy n jest liczba elementów tablicy może zawierać.Wyrażenie stała musi być typem całkowitym i musi być większa niż 0.Tablica o rozmiarze zero jest legalne, tylko wtedy, gdy tablica jest ostatnie pole w struct lub Unii i gdy włączone są rozszerzenia Microsoft (/Ze).
Poniższy przykład przedstawia sposób definiowania tablicy w czasie wykonywania:
// 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;
}
Tablice są typy pochodne i dlatego mogą być skonstruowane żadnego innego typu pochodnego lub podstawowych z wyjątkiem funkcji, odwołań, i void.
Skonstruowane z innych tablice tablic są tablice wielowymiarowe.Te tablice wielowymiarowe są określone przez umieszczenie wielu stałych wyrażeń w nawiasach kwadratowych w sekwencji.Na przykład należy wziąć pod uwagę tę deklarację:
int i2[5][7];
Określa tablicę typu int, jest koncepcyjnie ułożone w dwuwymiarową macierz pięć wierszy i kolumn siedmiu, jak pokazano na poniższym rysunku:
Rozplanowania koncepcyjnego tablicy wielowymiarowej
W deklaracji tablic multidimensioned, które mają listę inicjator (jak opisano w inicjatorów), można pominąć wyrażenie stałe, która określa granice dla pierwszego wymiaru.Na przykład:
// 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 }
};
Deklaracja poprzedniego określa tablicę, która jest trzy wiersze według czterech kolumn.Wiersze reprezentują fabryk a kolumny rynki, do których statek fabryk.Wartości są koszty transportu z fabryki do rynków.Pierwszy wymiar tablicy jest opuszczony, ale kompilator wypełnia ona poprzez zbadanie inicjatora.
Tematy w tej sekcji:
Przykład
Technika z pominięciem specyfikacji granice dla pierwszego wymiaru Tablica wielowymiarowa można również w deklaracji funkcji w następujący sposób:
// 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;
}
Komentarze
Funkcja FindMinToMkt jest napisane, takie, że dodanie nowych zakładów produkcyjnych nie wymaga żadnych zmian kodu, po prostu ponowną kompilację.