vector的几小点

1、vector初始化有一种用法:

vector<int> a(n,1); 

表示在a中初始化n个1。

有时经常会忘记了然后写出了这样的语句:vector<int> a(-1,1) ,发现编译器只是中断程序,却没有报出具体的错误。

  单步调试时,由于这句话在子函数中,也很难调出来。 谨记谨记!!

  具体什么原因:查看了《STL源码》

发现vector的定义如下:

vector(size_type n,const T& value)

{fill_initialize(n,value);}

再看fill_initialize函数

void fill_initialize(size_type n,const T& value)

{

start=allocate_and_fill(n,value);

finish =start +n;

end_of_storage=finish;

}

再转allocate_and_fill函数

iterator allocate_and_fill(size_type n,const T& x)

{

  iterator result= data_allocator::allocate(n);

uninitialized_fil_n(result,n,x);

return result;

}

发现allocate中是通过new来分配内存的,new的参数中个数都是无符号数,所以不符合定义。

2、vector的析构

vector申请的空间是存在堆中的
一般析构函数只能释放vector中的元素,并不能释放里面的空间。
可以用下面这种方法释放:
  1.  vector<int>().swap(arr); //交换后  
  2. //方法二、  
  3. {  
  4.     vector<int> temp;//临时对象未初始化,其缓冲区大小为0,没有数据  
  5.     arr.swap(temp);//与我们的对象交换数据,arr的缓冲区就没了。  
  6. }//临时变量会被析构,temp调用vector析构函数释放空间 

 

posted on 2016-03-14 19:15  RenewDo  阅读(246)  评论(0)    收藏  举报

导航