私は動的配列に関する本でどこでも勉強しました。私は C++ の STL でそれらを使用しました。しかし、動的配列とは何かについてはまだ不明です。動的配列に対する操作の実装方法。
1 に答える
C++ には、4 種類の配列があります (まあ、もうすぐです!)。C スタイルの静的配列、C++11静的配列、C++動的ベクトル、および C++14動的配列です。
C スタイルおよび C++11 の静的配列は、コンパイル時の定数サイズ パラメーターを取り、初期化後に拡大/縮小することはできません。C++ 動的ベクトルは、初期化時に実行時に任意の数の要素を使用でき、後で拡大/縮小できます。今後の C++14 標準ではstd::dynarray
、既存のコンテナー間の小さなギャップを埋めるものもあります。初期化中にランタイム数の要素が必要になりますが、後で拡大/縮小することはできません。
以下に、いくつかの基本的な使用例を示します。
static const int N = 4; // compile-time constant int
int M = 4; // run-time int
int c[N] = { 0, 1, 2, 3 }; // C-style static array: compile-time constant size
std::array<int, N> a = { 0, 1, 2, 3 }; // C++11 static array: compile-time constant size
int rc[M] = { 0, 1, 2, 3 }; // ERROR: M is not a compile-time constant expression
std::array<int, M> ra = { 0, 1, 2, 3 }; // ERROR: M is not a compile-time constant expression
std::vector<int> v { std::begin(a), std::end(a) }; // C++ dynamic vector: runtime size, but can be enlarged afterwards
v.push_back(4); // v enlarged to { 0, 1, 2, 3, 4 } now
v.pop_back(); // v shrunk back to { 0, 1, 2, 3 }
std::dynarray<int> d { std::begin(v), std::end(v) }; // C++14 dynamic array: runtime size, but cannot be enlarged afterwards
静的配列 (C スタイルの配列std::array
) は、スタック上で静的メモリ割り当てを行います。動的配列 (std::vector<T>
およびstd::dynarray<T>
) は、Allocatorテンプレート パラメーターを取ることができます。このstd::vector
アロケータのデフォルトはstd::allocator<T>
で、バックグラウンドで を使用して動的な低レベルのメモリ管理を行いnew
ます。メモリは指定されていないソースから割り当てられるためstd::dynarray
、 global を呼び出す場合と呼び出さない場合がありoperator new
ます。
ユーザー定義のアロケータを提供することで、 @HowardHinnant のstack allocatorstd::vector
などを使用して、 と の両方をスタックベースのメモリ割り当てで動作させることができます。std::dynarray