1

C++11 ではstd::array、 に似た新しい がありboost::arrayます。例:

std::array<int, 5> fiveInts;

この新しい配列を 2 つの方法で使用したい場合:

  1. stack に配列を割り当てます。
  2. heap に配列を割り当てます。

構文的にそれを達成する方法は?5それは変数にすることができますconstか?

4

3 に答える 3

4
std::array<int, 5> fiveInts;

スタックに配列を割り当てます (自動ストレージ)。

std::array<int,5>* fiveInts = new std::array<int, 5>;

ヒープ (動的ストレージ) に配列を割り当てます。

はい、コンパイル時に値を知る必要があります。

于 2012-11-13T15:17:02.713 に答える
4

テンプレートの引数は、コンパイル時に常に認識されている必要があります。a のサイズをstd::array変数にすることはできません。

ヒープ上で連続した値のバッファを管理する最良の方法はstd::vector、 を使用することです。これにより、バッファのサイズを実行時にサイジングできます。

std::array<int, 5> fiveInts;スタック上に 5 つの要素の配列を作成します (自動ストレージ内)。 ヒープ (フリー ストア) にstd::vector<int> fiveInts(5);5 秒のマネージ バッファーを作成します。int

std::arrayを呼び出してヒープ上に完全に作成することもできますnewが、私はそれをお勧めしません。 std::arrayの主な利点は、スタックベース (または内部クラスベース) のストレージが可能になることです。

于 2012-11-13T15:40:59.733 に答える
2

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実行時にサイズを調整できます。

于 2012-11-13T16:07:51.260 に答える