トップページに戻る
次のC++のサンプルへ
前のC++のサンプルへ
2-6 ValArrayとVectorで多次元配列
C++のサンプル
ValArrayとVectorを組み合わせて多次元配列もどきを実装するサンプルです。
ソース
#include <vector>
#include <valarray>
#include <stdio.h>
void main()
{
//intの2次元配列のサンプル
std::valarray<int> XArr(111,2);
std::vector<std::valarray<int> > TestArrVect1(3,XArr);
std::vector<std::valarray<int> > TestArrVect2 = TestArrVect1; //代入演算で全要素をコピー可能
for(int X=0;X<=(int)TestArrVect1.size()-1;X++){
for(int Y=0;Y<=(int)TestArrVect1.at(X).size()-1;Y++){
TestArrVect1.at(X)[Y] = 999;
}
}
for(int X=0;X<=(int)TestArrVect1.size()-1;X++)
for(int Y=0;Y<=(int)TestArrVect1.at(X).size()-1;Y++)
printf("TestArrVect.at(%d)[%d] = %d\n",X,Y,TestArrVect1.at(X)[Y]);
for(int X=0;X<=(int)TestArrVect2.size()-1;X++)
for(int Y=0;Y<=(int)TestArrVect2.at(X).size()-1;Y++)
printf("TestArrVect.at(%d)[%d] = %d\n",X,Y,TestArrVect2.at(X)[Y]);
//GetUpperBound(0)
printf("GetUpperBound(0) = %d\n",TestArrVect1.size());
//GetUpperBound(1)
printf("GetUpperBound(1) = %d\n",TestArrVect1.at(0).size());
}
実行結果
TestArrVect.at(0)[0] = 999
TestArrVect.at(0)[1] = 999
TestArrVect.at(1)[0] = 999
TestArrVect.at(1)[1] = 999
TestArrVect.at(2)[0] = 999
TestArrVect.at(2)[1] = 999
TestArrVect.at(0)[0] = 111
TestArrVect.at(0)[1] = 111
TestArrVect.at(1)[0] = 111
TestArrVect.at(1)[1] = 111
TestArrVect.at(2)[0] = 111
TestArrVect.at(2)[1] = 111
GetUpperBound(0) = 3
GetUpperBound(1) = 2
解説
2次元配列は、
ValArrayのVector
VectorのVector
3次元配列は、
VectorのVectorのVector
ValArrayのVectorのVector
などで実装でき、
ビルトイン配列での、全要素のコピー(memcpy関数やfor文での個別代入)や、
GetUpperBound(sizeof演算子)をシンプルに記述できます。