Udostępnij za pośrednictwem


Tablice (C++)

Tablica jest zbiorem podobnych obiektów.Najprostszą formą tablicy jest wektor, który może być zdeklarowany przez poniższą sekwencję:

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

1.Specyfikator deklaracji

  • Opcjonalna specyfikator urządzenia klasy magazynowania.

  • Opcjonalny const i/lub specyfikatory volatile.

  • Typ elementów pierwszej sekwencji tablicy.

2.Specyfikator:

  • Identyfikator.

  • Wyrażenie stałe typu liczba całkowita ujęte w nawiasy kwadratowe, []. Jeśli wiele wymiarów jest zadeklarowanych za pomocą dodatkowych nawiasów, wyrażenie stałe może zostać pominięte w pierwszym zestawie nawiasów.

  • Opcjonalne dodatkowe nawiasy zamykające stałe wyrażenia.

3.Opcjonalny inicjator. Zobacz Inicjatory.

Liczba elementów w tablicy jest podana przez wyrażenie stałe.Pierwszy element w tablicy jest zerowym elementem, a ostatni element jest (n-1) elementem, gdzie n jest liczbą elementów, jakie może zawierać tablica.Wyrażenie stałe musi być typu całkowitego i musi być większe niż 0.Tablica o rozmiarze zero jest legalna tylko wtedy, gdy tablica jest w ostatnim polu w struct lub Unii i kiedy są włączone rozszerzenia Microsoft (/Ze).

Poniższy przykład pokazuje jak zdefiniować tablicę 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ą typami pochodnymi i dlatego mogą być wykonany z każdego innego typu pochodnego lub typu podstawowegoz wyjątkiem funkcji, odwołań, i void.

Tablice wykonane z innych tablic są tablicami wielowymiarowymi.Te wielowymiarowe tablice są określone poprzez umieszczenie w sekwencji wielu stałych wyrażeń w nawiasach.Na przykład rozważmy tę deklarację:

int i2[5][7];

Określa on tablicę typu int, koncepcyjnie ułożoną w dwuwymiarowej macierzy pięciu wierszy i siedmiu kolumn, jak pokazano na poniższym rysunku:

Koncepcyjny układ tablicy wielowymiarowej

Koncepcyjny układ Wielowymiarowe tablice

W deklaracji tablic wielowymiarowych, które posiadają listę inicjującą (zgodnie z opisem w Inicjatory), można pominąć wyrażenie stałe, które określają 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 }
};

Poprzedzająca deklaracja określa tablicę składającą się z trzech wierszy i czterech kolumn.Wiersze reprezentują fabryki, a kolumny reprezentują rynki, na które fabryki dostarczają.Wartości to koszt transportu z fabryk na rynki.Pierwszy wymiar tablicy jest wykluczony, ale kompilator wypełnia go poprzez zbadanie inicjatora.

Tematy w tej sekcji:

Przykład

Technika pomijania specyfikacji powiązań dla pierwszego wymiaru wielowymiarowej tablicy może być również stosowana 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 napisana tak, że dodanie nowych fabryk nie wymaga żadnych zmian kodu, tylko ponownej kompilacji.

Zobacz też

Informacje

Deklaratory abstrakcyjne języka C++