以下のコードを使用してベクトルに要素を追加すると、fooを呼び出すときに、vecの要素(自動変数)は、それらが作成されたスコープが終了してから破棄されています。
std::vector<A> vec;
for (int i = 0; i < n; i++) {
A a;
vec.push_back(a);
}
foo(vec);
私の質問は、そのような問題に対する教科書の解決策は何であるかということです。
いいえ、 の要素は のvec
異なるコピーになりa
ます。
ただし、使用する場合、またはvec
使用する場合は、のサイズを割り当てる必要があります。operator[]
vec.push_back()
for (int i = 0; i < n; i++) vec.push_back(A());
編集(質問の変更後):
push_back()
引数を参照として受け取りますが、内部的にはそのコピーを作成します。内部に保存するコピーを作成する前に不要なコピーを作成しないように、参照によって引数を取ります。
スタック変数について心配する必要はありません。std::vector に値をプッシュすると、このコンテナーは変数のヒープ コピーを作成します。したがって、スコープ内にいるときは、すべての変数が存在します。
変数をグローバルとして定義し、ループでその変数に値を入れてからプッシュバックすることができます