• C++ 如何将一个vector内容赋值给另一个vector?(注意:用等号赋值,有坑!过了生命周期就不行了)


    在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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    ubuntu x64编译运行结果:

    in function
    0
    1
    out function
    
    • 1
    • 2
    • 3
    • 4

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

    参考文章:如何将一个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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    运行结果:

    in function
    0
    1
    out function
    0
    1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    在这里插入图片描述
    在这里插入图片描述
    发现好像是我的程序有bug,一个是我pos结构那里坐标数据应该用double的,结果用了int;还有一个是从json节点获取值的时候,应该用getValueDouble,结果用了getValueInt。。。。

    修复后就好了,,,

  • 相关阅读:
    linux排查java进程占用CPU过高原因方法
    数据库字典Navicat自动生成版本
    子线程渲染技术和AC自动机
    如何使用 Nmcli 通过 Linux 终端连接到 Wi-Fi
    腾讯mini项目-【指标监控服务重构】2023-08-13
    14个SpringBoot优化小妙招
    redis+lua脚本实现接口限流
    高NA傅里叶显微镜单分子成像
    TypeScript 中 any、unknown、never 和 void
    基于Jeecgboot前后端分离的流程管理平台演示系统安装(一)
  • 原文地址:https://blog.csdn.net/Dontla/article/details/126937511