vectorでresize()とreserve()

2029 ワード

Markちょっと:
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

【苦労しないように努力しなければなりません】