array クラス(C++11)

[機能]

  固定長のオブジェクトを保持するコンテナであり,各要素は連続して格納されます.従来の C スタイルの配列のパフォーマンスを保ったまま,シーケンスのサイズの取得,要素の代入のサポートなど,標準コンテナの恩恵を受ける事ができます.

  array は,vector や list のようなデータ構造を持たず,通常配列と同じように,要素のためにだけメモリを消費します.そのため,vector に比べると,計算時間やメモリ効率の点で優れています.しかし,データの交換においては,vector 等であればデータ領域へのポインタを交換するだけですので O(1) の処理時間で済みますが,array の場合は,中身のデータを交換せざるを得ず O(N) の処理時間を要します.
template <class T, size_t N> struct array 		

[使用方法]
#include <array>
using namespace std;
array <T, N> 変数名;   // T : 変数の型,N : 要素の数
      // 要素数が 3 で,全て要素が 0
   array<int, 3> x;
      // 最初の 3 個の要素を初期化子リストで初期化,残りの要素は 0
   array<int, 5> y = {1, 2, 3};
      // array y で初期化
   array<int, 3> z = y;		
[メンバー関数等]

[演算子の多重定義]
==  <  <=  !=  >  >=  []		

[使用例]

  1. array の使用方法です.以下に示すプログラム例において,いくつかのコメント部分は,その上に記述された方法とほぼ同等なものであることを示しています.
    #include <iostream>
    #include <array>
    
    using namespace std;
    
    int main()
    {
    	array<int, 5> a = {1, 2, 3};
    	array<int, 5> b = {a};   // コピーコンストラクタ
    			// 初期状態
    	cout << "初期状態 *a*";   // 下に示す b と同じ方法でも良い
    	for (auto x : a)
    		cout << " " << x;
    	cout << endl;
    
    	array<int, 5>::iterator it = b.begin();
    	cout << "初期状態 *b*";
    	for (int i1 = 0; i1 < (int)b.size(); i1++)
    		cout << " " << *it++;
    //		cout << " " << b[i1];
    //		cout << " " << b.at(i1);
    	cout << endl;
    			// b[4] に a[0] を代入
    	cout << "b[4] に a[0] を代入 *b*";
    	b.back() = a.front();   // b[b.size()-1] = a.front();
    	for (int i1 = 0; i1 < (int)b.size(); i1++)
    		cout << " " << b[i1];
    	cout << endl;
    			// a を 10 で満たす
    	a.fill(10);
    	cout << "a を 10 で満たす *a*";
    	for (auto x : a)
    		cout << " " << x;
    	cout << endl;
    			// swap
    	b.swap(a);
    	cout << "swap *a*";
    	for (auto x : a)
    		cout << " " << x;
    	cout << endl;
    	cout << "swap *b*";
    	for (auto x : b)
    		cout << " " << x;
    	cout << endl;
    
    	return 0;
    }
    			
    (出力)
    初期状態 *a* 1 2 3 0 0
    初期状態 *b* 1 2 3 0 0
    b[4] に a[0] を代入 *b* 1 2 3 0 1
    a を 10 で満たす *a* 10 10 10 10 10
    swap *a* 1 2 3 0 1
    swap *b* 10 10 10 10 10			
[参照]

vectorsetmultimapdequelistmapmultisetpriority_queuequeuestackforward_listunordered_mapunordered_multimapunordered_setunordered_multiset

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引