3

ベクトルをベクトルのベクトルにプッシュすると、容量が引き継がれるかどうか疑問に思っていました。

次のようなコードがあるとします

std::vector< std::vector< int > >  vec_of_vec;
std::vector< int > tmp;

for (int i = 0 ; i < 100; ++i) {
   foo(tmp,i); // fills tmp with an arbitrary number of ints, different for each i.
   vec_of_vec.push_back(tmp);
   tmp.clear();
}

現在、.clear()は容量を削減しないため、 の特定のインスタンスtmpが より小さい場合tmp.capacity()、 に押し戻されるtmp.capacity()と収まるように縮小されます。つまり、どのコンストラクターが push_back 呼び出しを行い、そのプロセスで容量が変更されるのでしょうか?tmp.size()vec_of_vec

4

2 に答える 2

1

押し戻されたアイテムの容量vec_of_vec.back()は実装定義です。

ただし、(コピー コンストラクターを使用して) にコピーされるため、元tmpのオブジェクトの容量は呼び出しで変更されません。vec_of_vectmpvec_of_vec.push_back()

于 2013-08-14T19:14:35.983 に答える
0

push_back引数をコピーするvec_of_vecためtmp、内容を参照しなくなりvec_of_vec、コピーコンストラクターが呼び出されます

于 2013-08-14T19:11:51.190 に答える