トップページに戻る    次の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は、ビルトイン配列よりも便利な点(関数に渡しても要素数を取得できる。代入演算での一括処理など)
が多いです。