详解vector的push_back()和emplace_back()

本人最近看别人代码的时候,发现别人用到了emplace_back(),通过搜索和测试,在这里记录一下他们的区别。
1、相同的情况
以变量的方式从尾部插入时,这两种用法完全一样,没有区别。以vector test为例,See可以为任意类型

struct See
{
	int value;
};

int main()
{
	vector<See> test;
	See a;
	a.value = 2;
	test.push_back(a);   //以变量的方式从尾部插入
	test.emplace_back(a); //以变量的方式从尾部插入
	for (int i = 0; i < test.size(); i++)
	{
		cout << "Vector[" << i << "]" << test.at(i).value << endl;
	}
    return 0;
}

2、不同的情况
同样以vector test为例,根据vector中存放的不同类型,push_back()可以识别元素类型;emplace_back()需要显式标注出是何种类型,具体见下述代码

int main()
{
	vector<int> test;
	test.push_back(2);    //OK 
	test.emplace_back(3); //OK
	for (int i = 0; i < test.size(); i++)
	{
		cout << "Vector[" << i << "]" << test.at(i) << endl;
	}
    return 0;
}
	vector<string> test;
	test.push_back("ss");    //OK 
	test.emplace_back("ss"); //OK
	test.push_back({"ss"});    //OK 
	test.emplace_back({"ss"}); //Error
	test.emplace_back(string{"ss"}); //OK

有上例可以举一反三的应用到bool,int,以及自定义的类型。

综上,在插入变量的时候两者在用法上没有区别,在插入值的时候,push_back()更简单一些,emplace_back()则需要显式标注出类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值