配列 (C++)

配列は同じようなオブジェクトのコレクションです。配列の最も簡単な例は次の順序で宣言できるベクターです :

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

1.宣言の指定子 :

  • 省略可能なストレージ クラスの指定子。

  • 省略可能な 定数 または volatile の指定子。

  • 配列の要素の型の名前。

2.宣言子 :

  • 識別子。

  • 角かっこで囲んだ整数型の定数式 []。 複数の次元で追加のかっこを使用して宣言されている場合定数式は角かっこの最初のセットで省略されることがあります。

  • 定数式をかっこで囲むオプションの追加。

3.省略可能な初期化子。初期化子 を参照してください。

配列の要素数は定数式で指定します。配列の最初の要素は 0th 要素で最後の要素は n は配列が持つことのできる要素の数 (n-1)要素です。 定数式は 整数型であり0 より大きくなければなりません。サイズの配列は配列が struct または 共用体 の最後のフィールドの場合にのみMicrosoft 拡張機能 (/Ze) が有効になっている場合です。

次の例は実行時に配列を定義する方法を示しています :

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

したがって派生型の配列関数参照および void を除く他の派生します。または基本型からも作成できます。

他の配列から構築された配列は多次元配列です。これらの多次元配列は複数の角かっこられている定数式で配置することによって指定されます。たとえば次の宣言について考えてみます。:

int i2[5][7];

これは5 行 7 列のテキスト ベースの行列の概念上次の図に示すように配列の型 int の配列を指定します :

多次元配列の概念レイアウト

多次元配列の概念レイアウト

初期化子リストがある multidimensioned 配列の宣言では初期化子 に説明されているように)指定する定数式が最初の次元の境界省略できます。次に例を示します。

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

上のように宣言は 4 列を基準にして 3 行ずつ実行する配列を定義します。行はファクトリを表しファクトリ市場を表します。値はファクトリから市場に交通機関のコストです。配列の最初の次元は省かれますがコンパイラは初期化子を調べることによってこれを入力します。

このセクションのトピック

使用例

多次元配列の最初の次元の範囲の指定を省略する方法は関数宣言でを使用できます :

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

コメント

新しいファクトリを追加するにはコード変更は必要ではありません。関数 FindMinToMkt はこのようなものも再コンパイルされます。

参照

関連項目

C++ の抽象宣言子