C++编程思想 第2卷 第7章 通用容器 基本序列容器:vector list deque 已配置存储区溢出的代价

使用deque的情况下 
当一块存储块发生溢出时会发生什么事情

//: C07:DequeOverflow.cpp {-bor}
// From "Thinking in C++, Volume 2", by Bruce Eckel & Chuck Allison.
// (c) 1995-2004 MindView, Inc. All Rights Reserved.
// See source code use permissions stated in the file 'License.txt',
// distributed with the code package available at www.MindView.net.
// A deque is much more efficient than a vector when
// pushing back a lot of elements, since it doesn't
// require copying and destroying.
//{L} Noisy
#include <cstdlib>
#include <deque>
#include "Noisy.h"
using namespace std;

int main(int argc, char* argv[]) {
  int size = 1000;
  if(argc >= 2) size = atoi(argv[1]);
  deque<Noisy> dn;
  Noisy n;
  for(int i = 0; i < size; i++)
    dn.push_back(n);
  cout << "\n cleaning up " << endl;
  getchar();
} ///:~


输出

d[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
c[0]
输出省略 后面都是 c[0]

 cleaning up

在 cleaning up 输出出现之前 
有比较少析构函数的调用
因为deque在多个块中分配所有的存储区
而不是像vector一样使用一个类数组的存储区 

猜你喜欢

转载自blog.csdn.net/eyetired/article/details/82422102