push_back函数在C++中的vector头文件中,在vector类中作用为在vector尾部加入一个数据。string中也有这个函数,作用是字符串之后插入一个字符。和insert相比push_back,insert 放到指定位置,push_back放到最后一位。

push_back是stl里面容器的方法。
比如vector que;
que.push_back(‘a’);
que.push_back(‘b’);
push_back在作用是在容器里添加相应的元素。
que.push_back((char)(dep+1+’0’));的意思是向容器中加入一个(dep+1+’0’)的字符

例如:
当主函数只有一个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有预存的内存(capacity),如果存入的元素大于了capacity,就重新分配一个比原来capacity大两倍的内存。

#include <iostream>
#include <vector>
using namespace std;
class test {
public:string a;test(string b) : a(b) {cout << "new" << " " << a << endl;}~test() {cout << "deleted " << a << endl;}
};
int main(int argc, const char * argv[]) {vector<test> array;string a = "A";array.push_back(test("a"));cout << array.capacity() << endl;array.push_back(test("b"));cout << array.capacity() << endl;array.push_back(test("c"));cout << array.capacity() << endl;array.push_back(test("d"));cout << array.capacity() << endl;array.push_back(test("f"));cout << array.capacity() << endl;return 0;
}

输出:

new a
deleted a
1
new b
deleted a
deleted b
2
new c
deleted b
deleted a
deleted c
4
new d
deleted d
4
new f
deleted d
deleted c
deleted b
deleted a
deleted f
8
deleted f
deleted d
deleted c
deleted b
deleted a
Program ended with exit code: 0

结合一起看:

#include <iostream>
#include <vector>using namespace std;struct test{test(char c) :a(c){cout << "New " << a << endl;}~test(){cout << "delete " << a << endl;}char a;
};int main()
{vector<test> t;for (char c = 'a'; c < 'z' + 1; ++c) {t.push_back(c);cout << t.capacity() << endl;}system("pause");
}

输出:

New a
delete a
1
New b
delete a
delete b
2
New c
delete b
delete a
delete c
4
New d
delete d
4
New e
delete d
delete c
delete b
delete a
delete e
8
New f
delete f
8
New g
delete g
8
New h
delete h
8
New i
delete h
delete g
delete f
delete e
delete d
delete c
delete b
delete a
delete i
16
New j
delete j
16
New k
delete k
16
New l
delete l
16
New m
delete m
16
New n
delete n
16
New o
delete o
16
New p
delete p
16
New q
delete p
delete o
delete n
delete m
delete l
delete k
delete j
delete i
delete h
delete g
delete f
delete e
delete d
delete c
delete b
delete a
delete q
32
New r
delete r
32
New s
delete s
32
New t
delete t
32
New u
delete u
32
New v
delete v
32
New w
delete w
32
New x
delete x
32
New y
delete y
32
New z
delete z
32
delete z
delete y
delete x
delete w
delete v
delete u
delete t
delete s
delete r
delete q
delete p
delete o
delete n
delete m
delete l
delete k
delete j
delete i
delete h
delete g
delete f
delete e
delete d
delete c
delete b
delete a
Program ended with exit code: 0

push_back讲解相关推荐

  1. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  2. helloworld讲解cocos2d-x的编程思路与要点

    用helloworld讲解cocos2d-x的编程思路与要点 本文以cocos2d-x的helloworld为例,讲解cocos2d-x引擎的特点和要点,2.2为了展示新功能,把包括屏幕自适应在内的新 ...

  3. 树链剖分 讲解+模板+习题

    今天我们来讲一下树链剖分 树链剖分是什么? 树链剖分是一种用来维护树上路径信息的在线方法,可以处理在线. 通常通过一种方法,将一棵树剖分成若干条链,然后通过数据结构(线段树,BIT等)去维护. 我们通 ...

  4. 详细讲解3DMAX导出插件-tiamo

    转自:详细讲解3DMAX导出插件-tiamo 3dmax的导出插件是用来把做好的3d模型导出成自己引擎需要的格式的一个dll,它由3dmax加载调用.具体怎样去写一个插件,小T不多说,在3dmax的s ...

  5. 框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解)

    框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解) 通过昨天的讲解,我们已经理解了运行时类型识别是什么. 比如  CObject * pthis = (Cobject *)Cre ...

  6. 模型的骨骼动画技术讲解

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  7. 遗传算法最通俗的讲解案例

    遗传算法 遗传算法求全局最优解或者近似优解. 遗传算法GA可以用到数据挖掘领域,由于缺少一些详细的例子,导致难以理解,以下是一个大牛的遗传算法的详细例子,通过这个例子,我们可以详细而且直观的加深对遗传 ...

  8. 【随机算法梗概】遗传算法通俗的讲解案例~~

    转载自博客: https://blog.csdn.net/u014028070/article/details/52447632   然鹅找不到原文网址了..感觉很对不起原创楼主. 遗传算法 遗传算法 ...

  9. Huffman编码解压缩的通俗讲解

    前言 好久没写博客了,主要是各种事缠着,难以抽出时间.这两个月以来,由于项目需要,我也逼着自己学到了很多,什么java后台,web前端,还有万恶的OpenCV图形处理--,呵呵,全栈:( .但对And ...

  10. 数据结构基础 之 递归算法实例讲解

    在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易 ...

最新文章

  1. 背包模型dp1:01背包,完全背包,多重背包的两大优化的详解
  2. 用递归的方法求s = k! + n! / m!的值
  3. 云原生生态周报 Vol. 14 | K8s CVE 修复指南
  4. 在云中使用 MapReduce 和负载平衡
  5. 生成自签名ssl证书
  6. 【微信小程序】给绑定事件传参数
  7. 【计算机视觉】究竟谁能解决可解释性 AI?
  8. html语言 input button,Html-button和input的区别
  9. 凯立德地图导航2020年最新版车载_明明有车载导航,为什么很多人还是选择用手机导航?有5个原因...
  10. 计算机上没有启动程序怎么办,Win7开机不加载启动项怎么办
  11. idea直接打开html报404,idea部署Tomcat启动成功了但是页面出现404
  12. 巴塞尔大学合作项目博士招生,医学图像分析领域
  13. 单片机语音库文件_20天备战智能车之NXP库使用教程逐飞科技
  14. Ubuntu 图形桌面死机重启(机器不重启)
  15. 称重传感器知识:型号,认证,性能与选择
  16. matlab 图像噪声去除,基于Matlab的图像去除噪声的研究
  17. 制作一个简单的轮播图(详解新手教学)
  18. python return返回值格式化_day11__函数名的应用,python新特f-strings格式化输出、迭代器...
  19. ICMP协议及报文格式
  20. 解决TypeError:Cannot read properties of undefined并深入解读TypeError错误类型

热门文章

  1. 金仓数据库 KingbaseES 插件参考手册 sys_qualstats
  2. python三国演义人物出场统计txt文本_python实例:三国演义TXT文本词频分析
  3. 论文笔记 Question Answering over Freebase via Attentive RNN with Similarity Matrix based CNN
  4. 贤心的WEB弹窗挺不错的
  5. BitCoinCore配置文件解读
  6. etf基金代码大全_ETF赚钱丨什么是ETF?知道这三点就入门了!
  7. Python3学习(34)--简单网页内容抓取(爬虫入门一)
  8. 单像空间后方交会编程实现
  9. 解决windows 10在联网时依旧无法安装3DMAX2014
  10. c语言OBD编程,汽车OBD2诊断程序开发