トップページに戻る    次のC++のサンプルへ    前のC++のサンプルへ

2-4 TR1のstd::arrayのサンプル

C++のサンプル

VC++2008のSP1から使用可能な、std::arrayのサンプルです。


ソース

#include <stdio.h>
#include <array>
#include <vector>

typedef std::array<int,3> ArrayDef;

void OtherFunc(std::array<int,3> pIntArr);

void main()
{
    //std::vector<ArrayDef> TestVect; typedefした型を使ってもOK
    std::vector<std::array<int,3> > TestVect;
    std::array<int,3> wkIntArr;
    for(int I=0;I<=5;I++){
        for(int J=0;J<=(int)wkIntArr.size()-1;J++){
            wkIntArr[J]=I;
        }
        TestVect.push_back(wkIntArr);
    }
    for(int I=0;I<=(int)TestVect.size()-1;I++){
        for(int J=0;J<=(int)TestVect[I].size()-1;J++){
            //atメソッドで値にアクセス可
            printf("TestVect[%d].at(%d)=%d\n",I,J,TestVect[I].at(J));
        }
    }

    OtherFunc(wkIntArr); //関数に渡しても配列のサイズが取得可能

    std::array<int,2> TestFillArr;
    TestFillArr.fill(999); //fillメソッドで配列の初期化可能
    for(std::array<int,2>::iterator it = TestFillArr.begin();it != TestFillArr.end();it++){
        static int rn=0;
        printf("%d番目は%d\n",++rn,*it);
    }
}

void OtherFunc(std::array<int,3> pIntArr)
{
    printf("pIntArr.size()=%d\n",pIntArr.size());
}


実行結果

TestVect[0].at(0)=0
TestVect[0].at(1)=0
TestVect[0].at(2)=0
TestVect[1].at(0)=1
TestVect[1].at(1)=1
TestVect[1].at(2)=1
TestVect[2].at(0)=2
TestVect[2].at(1)=2
TestVect[2].at(2)=2
TestVect[3].at(0)=3
TestVect[3].at(1)=3
TestVect[3].at(2)=3
TestVect[4].at(0)=4
TestVect[4].at(1)=4
TestVect[4].at(2)=4
TestVect[5].at(0)=5
TestVect[5].at(1)=5
TestVect[5].at(2)=5
pIntArr.size()=3
1番目は999
2番目は999


解説

ビルトイン配列とValArrayとstd::array
は、使い分けるといいかもしれません。