C++ 如何将一个vector内容赋值给另一个vector?(注意:auto是内存拷贝,没法改原值;auto&是引用,才能改原值)

在c/c++中,将一个vector内容赋值给另一个vector的方法大概有如下四个:
方法1

vector v1(v2); //声明
方法2:使用函数assign进行赋值:

vector v1; //声明v1
v1.assign(v2.begin(), v2.end());//将v2赋值给v1
方法3:使用swap进行赋值:

vector v1();
v1.swap(v2); //将v2赋值给v1
方法4:使用最笨的方法,即使用迭代器和循环语句赋值的方法。其方法运行效率较差

vector::iterator it;//声明迭代器
for(it = v2.begin();it!=v2.end();++it)//遍历v2,赋值给v1
{v1.push_back(it);}

有网友提出用等号赋值,这个有坑啊,出了生命周期就不行了!

#pragma warning(disable : 4996)
#include 
#include 
#include 
#include 

using namespace std;

void fun(vector<int> vec)
{
	vector<int> temp;
	temp.push_back(0);
	temp.push_back(1);
	vec = temp;	//用等号给容器赋值,有坑!
	cout << "in function" << endl;
	for (auto i : vec)
	{
		cout << i << endl;
	}
}


int main()
{
	vector<int> vec;
	fun(vec);
	cout << "out function" << endl;

	for (auto i:vec) 
	{
		cout << i << endl;
	}
	return 0;
}

ubuntu x64编译运行结果:

in function
0
1
out function

可以看到,出了函数后,赋值就失效了。。。

参考文章:如何将一个vector内容赋值给另一个vector C/C++

20221008
我去,这不是因为你没加引用的原因吗???

加个引用不就行了??

#pragma warning(disable : 4996)
#include 
#include 
#include 
#include 

using namespace std;

void fun(vector<int>& vec)	//加个引用
{
	vector<int> temp;
	temp.push_back(0);
	temp.push_back(1);
	vec = temp;	//用等号给容器赋值,有坑!
	cout << "in function" << endl;
	for (auto i : vec)
	{
		cout << i << endl;
	}
}


int main()
{
	vector<int> vec;
	fun(vec);
	cout << "out function" << endl;

	for (auto i : vec)
	{
		cout << i << endl;
	}
	return 0;
}

运行结果:

in function
0
1
out function
0
1

20220919 奇了葩了,我用assign怎么也不行呢?

C++ 如何将一个vector内容赋值给另一个vector?(注意:auto是内存拷贝,没法改原值;auto&是引用,才能改原值)_第1张图片
C++ 如何将一个vector内容赋值给另一个vector?(注意:auto是内存拷贝,没法改原值;auto&是引用,才能改原值)_第2张图片
发现好像是我的程序有bug,一个是我pos结构那里坐标数据应该用double的,结果用了int;还有一个是从json节点获取值的时候,应该用getValueDouble,结果用了getValueInt。。。。

修复后就好了,,,

你可能感兴趣的:(C/C++,c++,开发语言)