-1

以下のコードを使用してベクトルに要素を追加すると、fooを呼び出すときに、vecの要素(自動変数)は、それらが作成されたスコープが終了してから破棄されています。

std::vector<A> vec;
for (int i = 0; i < n; i++) {
  A a;
  vec.push_back(a);
}

foo(vec);

私の質問は、そのような問題に対する教科書の解決策は何であるかということです。

4

3 に答える 3

2

いいえ、 の要素は のvec異なるコピーになりaます。

ただし、使用する場合、またはvec使用する場合は、のサイズを割り当てる必要があります。operator[]vec.push_back()

for (int i = 0; i < n; i++) vec.push_back(A());

編集(質問の変更後):

push_back()引数を参照として受け取りますが、内部的にはそのコピーを作成します。内部に保存するコピーを作成する前に不要なコピーを作成しないように、参照によって引数を取ります。

于 2012-07-11T08:53:00.040 に答える
0

スタック変数について心配する必要はありません。std::vector に値をプッシュすると、このコンテナーは変数のヒープ コピーを作成します。したがって、スコープ内にいるときは、すべての変数が存在します。

于 2012-07-11T08:55:52.537 に答える
0

変数をグローバルとして定義し、ループでその変数に値を入れてからプッシュバックすることができます

于 2012-07-11T09:45:13.160 に答える