5

これが私が試したことです:

int fun1(vector<int> s)
{ 
    const int n = s.size();
    int arr[n]; //<----want to declare an array of length s.size()
}

しかし、これは n が定数式ではないことを示しているため、これを使用して配列サイズを宣言することはできません。しかし、私が試してみると:

int fun1(vector<int> s)
{ 
    const int n = 10;
    int arr[n]; //<-----this works
}

それなら大丈夫です。const 型のベクトル s を作成しても、サイズが定数式として認識されません。どうすればいいですか?

4

3 に答える 3

4

int arr[N];サイズによる配列の宣言Nは、コンパイル時に決定する必要があります (ランタイムでも定義できる一部のコンパイラ拡張機能を除く)。ちなみに、あなたはそれを作ることができます:

std::unique_ptr<int[]> arr (new int [n]);

// ... or ...

std::vector<int> arr(n);
于 2013-10-22T20:38:29.457 に答える
1

このため、C++ には がstd::vector<int>(n)あり、従来の C 配列のセマンティクスのほとんどを保持していますが、多くの利点も追加されています (動的割り当てが 1 つ、サイズ変更がもう 1 つ、アルゴリズムのサポートがさらにもう 1 つ)。基礎となるコードで C 配列が必要な場合でも、ベクトルを使用して最初の要素のアドレスを渡すことができます (これらは連続していることが保証されています)。

通常、std::vector基礎となるストレージにヒープを使用するため、一方ではスタック オーバーフローからより適切に保護されます (しゃれが意図されています)。他方では、コードは動的割り当てを使用するようになりました。

于 2013-10-22T20:27:23.147 に答える