C++ STL応用と実装】5:std::arrayの使用方法(C++11以降)
本連載の目次はこちらです。 目次 . 目次では、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
関連
-
[解決済み】無名名前空間内で宣言された関数の定義が見つからない - 解決方法は?(ビジュアルスタジオ2015)
-
[解決済み] Py_Initializeが失敗する - ファイルシステムのコーデックをロードできない
-
[解決済み] プログラムは2番目のCINをスキップする
-
[解決済み] クラスstringstream。lineStreamの動作、パラメータが理解できない。
-
[解決済み] std::back_inserter が std::inserter よりも優れている点は何ですか?
-
[解決済み] std:stringの未定義参照 [重複].
-
[解決済み] 名前空間 'std' の 'vector' が型名でない
-
[解決済み] Qt: -lGL が見つからないエラー
-
[解決済み] WinInetとInternetOpen
-
[解決済み] 共有オブジェクトの作成時に `.rodata.str1.8' に対する再配置 R_X86_64_32 は使用できません" でコンパイルに失敗する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】継承されたメンバが許されないのはなぜですか?
-
[解決済み] クロスの初期化エラーが多発する
-
[解決済み] C++、コンストラクタの後のコロンはどういう意味ですか?[重複]です。
-
[解決済み] C++の一次式 - 一次式なのかそうでないのか?
-
[解決済み] cin.ignore()は具体的に何をするのですか?
-
[解決済み] エラー C2109: 添え字には配列またはポインタ型が必要です。
-
[解決済み] なぜすべてのcoutとcinは「未宣言識別子」なのか?
-
[解決済み] std vector C++ -- ディープコピーまたはシャローコピー