Skip to content

Latest commit

 

History

History
180 lines (118 loc) · 3.88 KB

array.md

File metadata and controls

180 lines (118 loc) · 3.88 KB

配列

Boost.Array

Boostでは、標準コンテナのインタフェースで使用できる固定長配列クラス、boost::arrayを提供する。

インデックス

boost::arrayクラスは、組み込み配列にゼロオーバーヘッドな固定長配列クラスである。

このクラスは、組み込み配列とは異なり、std::vectorstd::listのような標準コンテナのインタフェースを持つ。

#include <iostream>
#include <boost/array.hpp>
#include <algorithm>

void disp(int x) { std::cout << x << ' '; }

int main()
{
    boost::array<int, 3> ar = {3, 1, 4};

    std::for_each(ar.begin(), ar.end(), disp);
}

実行結果:

3 1 4 

テンプレート引数

boost::arrayは、第1テンプレート引数に要素の型、第2テンプレート引数に要素数を取る。

この場合、「3要素のint型配列」を作成している。

初期化

boost::arrayは、組み込み配列と同様に、{ 1, 2, 3 }のような初期化子リストによる初期化が可能である。

イテレータインタフェース

boost::arrayは、std::vectorstd::listと同じように、イテレータを返すbegin()/end()のインタフェースを持つ。

配列の要素数を取得するには、size()メンバ関数を使用する。

#include <iostream>
#include <boost/array.hpp>

int main()
{
    boost::array<int, 3> ar = {3, 1, 4};

    const std::size_t size = ar.size();
    std::cout << size << std::endl;
}

実行結果:

3

boost::arrayは、組み込み配列やstd::vectorと同じように、operator[]()の添字演算子によって要素にランダムアクセスできる。

#include <iostream>
#include <boost/array.hpp>

int main()
{
    boost::array<int, 3> ar = {3, 1, 4};

    for (std::size_t i = 0; i < ar.size(); ++i)
        std::cout << ar[i] << std::endl;
}

実行結果:

3
1
4

boost::arrayは、begin()end()メンバ関数によって、最初の要素を指すイテレータ、最後尾要素の次を指すイテレータを取得できる。

#include <iostream>
#include <boost/array.hpp>
#include <algorithm>

void disp(int x) { std::cout << x << ' '; }

int main()
{
    boost::array<int, 3> ar = {3, 1, 4};

    std::for_each(ar.begin(), ar.end(), disp);
}

実行結果:

3
1
4

イテレータの型は、boost::array<T, N>クラスが持つ、以下のメンバ型で取得できる:

  • iterator : 変更可能なイテレータ
  • const_iterator : 読み取り専用イテレータ
#include <iostream>
#include <boost/array.hpp>
#include <algorithm>

int main()
{
    typedef boost::array<int, 3> Array;
    Array ar = {3, 1, 4};

    {
        Array::iterator it = std::find(ar.begin(), ar.end(), 1);
        if (it != ar.end())
            std::cout << *it << std::endl;
    }
    {
        Array::const_iterator it = std::find(ar.begin(), ar.end(), 4);
        if (it != ar.end())
            std::cout << *it << std::endl;
    }
}

実行結果:

1
4