vectorでresize()とreserve()
2029 ワード
Markちょっと:
1.resize(n)とresize(n,t)は、vector配列のサイズを調整し、補完を多く減らし、後のtは初期化数値で、追加時にコンストラクション関数を呼び出し、nのサイズがコンテナより大きい場合、コンテナのメモリディスペンサは自動的にメモリを再割り当て、メモリの割り当てに失敗するとbad_をエラーします.alloc .
例:(c++公式ドキュメントから)
結果:
2.reserve(n)とresize(n)の差は多くなく、nが現在のコンテナ容量より大きいと再割り当て(異常が放出される可能性がある)され、そうでないと再割り当てされません.また、reserveが増加した空間が初期化されていないと参照できません.
次に、使用例を示します.
【苦労しないように努力しなければなりません】
1.resize(n)とresize(n,t)は、vector配列のサイズを調整し、補完を多く減らし、後のtは初期化数値で、追加時にコンストラクション関数を呼び出し、nのサイズがコンテナより大きい場合、コンテナのメモリディスペンサは自動的にメモリを再割り当て、メモリの割り当てに失敗するとbad_をエラーします.alloc .
例:(c++公式ドキュメントから)
// resizing vector
#include
#include
int main ()
{
std::vector myvector;
// set some initial content:
for (int i=1;i<10;i++) myvector.push_back(i);
myvector.resize(5);
myvector.resize(8,100);
myvector.resize(12);
std::cout << "myvector contains:";
for (int i=0;i
結果:
myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0
2.reserve(n)とresize(n)の差は多くなく、nが現在のコンテナ容量より大きいと再割り当て(異常が放出される可能性がある)され、そうでないと再割り当てされません.また、reserveが増加した空間が初期化されていないと参照できません.
次に、使用例を示します.
// vector::reserve
#include
#include
int main ()
{
std::vector::size_type sz;
std::vector foo;
sz = foo.capacity();
std::cout << "making foo grow:
";
for (int i=0; i<100; ++i) {
foo.push_back(i);
if (sz!=foo.capacity()) {
sz = foo.capacity();
std::cout << "capacity changed: " << sz << '
';
}
}
std::vector bar;
sz = bar.capacity();
bar.reserve(100); // this is the only difference with foo above
std::cout << "making bar grow:
";
for (int i=0; i<100; ++i) {
bar.push_back(i);
if (sz!=bar.capacity()) {
sz = bar.capacity();
std::cout << "capacity changed: " << sz << '
';
}
}
return 0;
}
結果:making foo grow:
capacity changed: 1
capacity changed: 2
capacity changed: 4
capacity changed: 8
capacity changed: 16
capacity changed: 32
capacity changed: 64
capacity changed: 128
making bar grow:
capacity changed: 100
【苦労しないように努力しなければなりません】