C++11 ではstd::array、 に似た新しい がありboost::arrayます。例:
std::array<int, 5> fiveInts;
この新しい配列を 2 つの方法で使用したい場合:
- stack に配列を割り当てます。
- heap に配列を割り当てます。
構文的にそれを達成する方法は?5それは変数にすることができますconstか?
std::array<int, 5> fiveInts;
スタックに配列を割り当てます (自動ストレージ)。
std::array<int,5>* fiveInts = new std::array<int, 5>;
ヒープ (動的ストレージ) に配列を割り当てます。
はい、コンパイル時に値を知る必要があります。
テンプレートの引数は、コンパイル時に常に認識されている必要があります。a のサイズをstd::array変数にすることはできません。
ヒープ上で連続した値のバッファを管理する最良の方法はstd::vector、 を使用することです。これにより、バッファのサイズを実行時にサイジングできます。
std::array<int, 5> fiveInts;スタック上に 5 つの要素の配列を作成します (自動ストレージ内)。 ヒープ (フリー ストア) にstd::vector<int> fiveInts(5);5 秒のマネージ バッファーを作成します。int
std::arrayを呼び出してヒープ上に完全に作成することもできますnewが、私はそれをお勧めしません。 std::arrayの主な利点は、スタックベース (または内部クラスベース) のストレージが可能になることです。
std::array<T, N>Nタイプ のオブジェクトで構成されるテンプレートですT。このタイプの自動オブジェクトを作成できます。
void f() {
std::array<int, 5> auto_ints;
}
オブジェクトには 5 つの int オブジェクトが含まれ、すべてスタック上にあります。
フリー ストアでこのタイプのオブジェクトを作成することもできます。
void g() {
std::array<int, 5> *free_store_ints = new std::array<int, 5>;
}
しかし、そうする理由はほとんどありませんstd::vector<int>。
std::arrayコンパイル時にサイズを指定する必要があります。std::vector実行時にサイズを調整できます。