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
vector 的 push_back[转]的更多相关文章
- c++ vector push_back对象的时候存起来的是拷贝[转]
比如 class C1; vector<C1> vec; C1* p=new C1; vec v1; v1.push_back(&(*p)); delete p; 这里,传进函数的 ...
- C++实现vector
用了双向链表,快排,<<,=,[]重载,还有erase的实现比较好玩 //my Vecter ;T need "operator<" #include <i ...
- 说一说vector<bool>
vector<T>标准库模版类应该是绝大多数c++程序员使用频率比较高的一个类了.不过vector<bool>也许就不那么被程序员所了解.关于vector<bool> ...
- C++中的vector
opencv中用到了很多vector 整理一下 vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象).vector对象可以在运行时高效地添加元素,并且vector中元素是连续存 ...
- 高效使用Vector
参考网页: http://www.cnblogs.com/biyeymyhjob/archive/2013/05/11/3072893.html#undefined 1.初始化的时候,最好先用rese ...
- vector用法总结(转载)
一.vector的基本概念 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包 ...
- C++ STL vector 内存分配
vector为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储. 当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间.拷贝元素.撤销 ...
- vector和iterator及collection
Collection是所有集合的最上层接口,它里面定义了所有集合对象都可以进行的操作:它有两个子接口,分别是List和Set.List会记录放在其中元素的放入顺序,形象地说,可以认为是一个传送带,它上 ...
- C++ Primer第18章Vector的再实现及bug修正
C++Primer第18.1.2节在介绍allocator类的时候,给了一个仿照标准库中vector的例子.感觉示例代码非常好,但是本人发现了一个bug,与大家共享. 按照作者的示例程序,编译程序时总 ...
随机推荐
- Java并发编程初探
package test; import java.io.File; import java.io.FileReader; import java.io.IOException; import jav ...
- 虚拟主机无法使用fsockopen操作处理方法
一.如何禁用fsockopen()下面是两种常用的禁用fsockopen的方法.1.修改php.ini,将 disable_functions = 后加入 fsockopen2.修改php.ini,将 ...
- cnblogs 主题 summerGarden redesign
Intro cnblogs 的 summerGarden 主题是一个宽屏版的,而且设计虽然很Qzone风格,不过我个人喜欢「简单,扁平」的设计风格,所以就修改了一下样式. before after r ...
- 关于mysql中int(1)中int后面的数字
mysql在建表的时候int类型后的长度代表什么? 是该列允许存储值的最大宽度吗? 为什么我设置成int(1), 也一样能存10,100,1000呢. 当时我虽然知道int(1),这个长度1并不代表 ...
- Linux常用命令(四)
1.xargs 作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题 语法格式: # xargs [-ni] 常用参数: 参数 参数说明 -n 分组输出,n个分为一组 -i 与大括号 ...
- python 学习笔记十四 jQuery案例详解(进阶篇)
1.选择器和筛选器 案例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- [问题2014A04] 解答
[问题2014A04] 解答 (1) 由条件可得 \(AB+BA=0\), 即 \(AB=-BA\), 因此 \[AB=A^2B=A(AB)=A(-BA)=-(AB)A=-(-BA)A=BA^2=B ...
- oracle物化视图
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询. 这样对整 ...
- Flex http请求
下面类支持POST和GET请求,请求数据和出错将返回 package com.sole.util { import flash.events.Event; import flash.events.HT ...
- zoj3228Searching the String(ac自动机)
链接 这个题把病毒分为了两种,一种包含可以覆盖,另一种不可以,需要分别求出包含他们的个数,可以把两种都建在一颗tire树上,在最后求得时候判断一下当前节点是属于哪种字符串,如果是不包含的需要判断一下p ...