Ctrl+A

导航

vector 的 push_back[转]

vector是用数组实现的,每次执行push_back操作,相当于底层的数组实现要重新分配大小(即先free掉原存储,后重新malloc);这种实现体现到vector实现就是每当push_back一个元素,都要重新分配一个大一个元素的存储,然后将原来的元素拷贝到新的存储,之后在拷贝push_back的元素,最后要析构原有的vector并释放原有的内存。

    例如:
当主函数只有一个push_back时:
int main()
{
  vector sb;
  HP a;
  sb.push_back(a);
  while(1);   
}
由于原来的vector为空,所以只是分配新的空间,然后拷贝push_back的元素。所以结果如下:
   gouzao  //这是 语句 HP a; 构造a产生
   kaobei  //这是 语句 sb.push_back(a) 拷贝新元素产生的。

当主函数有两个push_back时:
int main()
{
  vector sb;
  HP a;
  sb.push_back(a);
  sb.push_back(a);
  while(1);   
}
注意执行第二个push_back时,首先另外分配两个元素的空间,并将原来的vector元素拷过来,后拷贝新push的元素,最后析构原来的元素。故结果如下 :
gouzao  //这是 语句 HP a; 构造a产生
kaobei  //这是 第一个sb.push_back(a) 拷贝新元素产生的。
kaobei  //下面这两个是由第二个sb.push_back(a)产生的,它先先将原来的vector元素拷过来,后拷贝新push的元素
kaobei
xigou  //只是析构原来的vector元素产生的。

当主函数有三个push_back时:一样分析,
int main()
{
  vector sb;
  HP a;//构造
  sb.push_back(a); //一个拷贝
  sb.push_back(a);//两个拷贝,一个析构
  sb.push_back(a);//三个拷贝,两个析构
  while(1);   
}
结果如下:
gouzao
kaobei
kaobei
kaobei
xigou
kaobei
kaobei
kaobei
xigou
xigou

posted on 2015-05-13 10:12  Ctrl+A  阅读(751)  评论(0编辑  收藏  举报