1. ホーム
  2. c++

C++ STL応用と実装】5:std::arrayの使用方法(C++11以降)

2022-02-21 18:27:07
<パス

本連載の目次はこちらです。 目次 . 目次では、STL全般の概要を説明します。

前書き

この記事では、STLのシリアルコンテナである配列の使い方と注意点についてまとめています。配列は,C++コードのさらなる近代化("modernization")を意味し,std::stringがc言語の文字列に代わってSTLで動作するように,配列は内部配列の先頭アドレスを取得できるdata()というインターフェイスや,C++配列がJavaなどのように長さを把握できるように固定長のsize()など,begin(), end()といったインターフェイスが提供されています.によって、"array" をSTLと互換性のあるものにする。また、タプルのようなインターフェースも提供し、さらに、配列はネイティブ配列と変わらない性能を持つ。

配列の概念

配列はSTLのシーケンシャルコンテナで,c-style配列をラップしたものですが,STLコンテナに対する通常の外部インタフェースを提供するものです.通常のc-style配列と同様に固定長を持ち、一度作成するとその長さは決定され、拡張や縮小はできない。

そのプロトタイプはこのようなテンプレートクラスになっています。

namespace std
{
    template <typename T, size_t N>
    class array;
}

最初のテンプレートパラメータTは,配列に格納されるデータの種類を指定します.

2番目の untyped template parameter は配列の固定サイズを指定します。

配列のインターフェース

コンストラクタ

<テーブル コンストラクター 説明 arrary<T, N> c デフォルトのコンストラクタで、すべてのN要素は"デフォルトの初期化動作"を使用して構築されます。 arrary<T, N> c(other) otherの全要素をcにコピーして構築するコピーコンストラクタです。 arrary<T, N> c = other other の全要素を c にコピーして構築するコピーコンストラクタです。 arrary<T, N> c(rValue) 右値rValueの要素を用いてcを初期化し、コンストラクトを移動させる。 arrary<T, N> c = rValue 右値rValueの要素を用いてcを初期化し、コンストラクトを移動させる。 arrary<T, N> c = initlist 初期化リストによる要素の初期化

備考 : デフォルトコンストラクタは、各要素の "default constructor" の動作で初期化されるため、基本型のデータでは初期値が不定になることを意味します。

array は "aggregate" である必要があります。ユーザー定義のコンストラクタ、private および protected 型の非静的メンバ、ベースクラス、ダミー関数は使用しないでください。

したがって、そのようなコンストラクタはサポートされていません。 array<int, 3> a({1, 2, 4}) ;

配列を初期化する最も一般的な方法は、代入演算子を使用する方法と、リストを初期化する方法です。

array
1, 2, 3};

array
1, 2, 3}; // a[0] ~ a[2] = 1, 2, 3; a[3] ~ a[99] = 0, 0, 0 ... 0;

array
assignment
c = other