c++中vector的 = 与 assign的区别

网上错误说法

	vector<int> v1(3, 10);
	vector<int> v2(5, 4);
	vector<int>v3(6, 5);
	vector<int>v4(7, 8);
	v2 = v1;
	v4.assign(v3.begin(), v3.end());
第一种

v1.size() = 0;
v2.size() = 3;

第二种

v2 只是改变了指针位置,指向v1

实际测试结果:

测试代码:

	vector<int> v1(3, 10);
	vector<int> v2(5, 4);
	vector<int>v3(6, 5);
	vector<int>v4(7, 8);
	qDebug() << "v1.addr: " << &v1 << "\nv2.addr: " << &v2 << "\nv3.addr: " << &v3 << "\nv4.addr: " << &v4;
	v2 = v1;
	qDebug() << "V1-size: " << v1.size()<<"v1.addr: "<<&v1;
	qDebug() << "v2-size: " << v2.size()<< "v2.addr: " << &v2;

	v4.assign(v3.begin(), v3.end());
	qDebug() << "V3-size: " << v3.size() << "v3.addr: " << &v3;
	qDebug() << "v4-size: " << v4.size() << "v4.addr: " << &v4;

测试结果:

v1.addr:  0x4db3b2f3e0 
v2.addr:  0x4db3b2f420 
v3.addr:  0x4db3b2f3c0 
v4.addr:  0x4db3b2f400
V1-size:  3 v1.addr:  0x4db3b2f3e0
v2-size:  3 v2.addr:  0x4db3b2f420
V3-size:  6 v3.addr:  0x4db3b2f3c0
v4-size:  6 v4.addr:  0x4db3b2f400

结论:

vector 的重载操作符 = 与 vector的 assign方法一样,都是深拷贝,
即:既没有改变指针指向,也没有清除之前的被操作变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值