3

私は動的配列に関する本でどこでも勉強しました。私は C++ の STL でそれらを使用しました。しかし、動的配列とは何かについてはまだ不明です。動的配列に対する操作の実装方法。

4

1 に答える 1

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

于 2013-06-10T08:13:26.730 に答える