トップページに戻る
次のC++のサンプルへ
2-1 ValArrayのサンプル
C++のサンプル
ビルトイン配列の代わりに使える、ValArrayのサンプルです。
ソース (サンプル1)
#include <valarray>
#include <vector>
typedef std::valarray<int> ArrayDef;
void OtherFunc(std::valarray<int> pIntArr);
void main()
{
//std::vector<ArrayDef> TestVect; typedefした型を使ってもOK
std::vector<std::valarray<int> > TestVect;
//コンストラクタの第1引数で初期値、第2引数で要素数を指定できる
std::valarray<int> wkIntArr(999,3);
for(int I=0;I<=2;I++){
for(int J=1;J<=(int)wkIntArr.size()-1;J++){
wkIntArr[J]=I*3;
}
TestVect.push_back(wkIntArr);
}
for(int I=0;I<=(int)TestVect.size()-1;I++){
for(int J=0;J<=(int)TestVect.at(I).size()-1;J++){
printf("TestVect.at(%d)[%d]=%d\n",I,J,TestVect.at(I)[J]);
}
}
OtherFunc(wkIntArr); //関数に渡しても配列のサイズが取得可能
}
void OtherFunc(std::valarray<int> pIntArr)
{
printf("pIntArr.size()=%d\n",pIntArr.size());
}
実行結果 (サンプル1)
TestVect.at(0)[0]=999
TestVect.at(0)[1]=0
TestVect.at(0)[2]=0
TestVect.at(1)[0]=999
TestVect.at(1)[1]=3
TestVect.at(1)[2]=3
TestVect.at(2)[0]=999
TestVect.at(2)[1]=6
TestVect.at(2)[2]=6
pIntArr.size()=3
ソース (サンプル2)
#include <valarray>
void main()
{
std::valarray<int> wkIntArr1(123,3);
std::valarray<int> wkIntArr2 = wkIntArr1; //代入演算で全要素をコピーできる
wkIntArr1 = 999; //全要素に一括代入可能
for(int I=0;I<=(int)wkIntArr1.size()-1;I++){
printf("wkIntArr1[%d]=%d\n",I,wkIntArr1[I]);
printf("wkIntArr2[%d]=%d\n",I,wkIntArr2[I]);
}
}
実行結果 (サンプル2)
wkIntArr1[0]=999
wkIntArr2[0]=123
wkIntArr1[1]=999
wkIntArr2[1]=123
wkIntArr1[2]=999
wkIntArr2[2]=123
解説
ValArrayは、ビルトイン配列よりも便利な点(関数に渡しても要素数を取得できる。代入演算での一括処理など)
が多いです。