请教一个关于stl::list<A*> LIST赋值的问题?
时间:2011-11-29
来源:互联网
我做如下定义:
class A; //已经存在的类
std::list<A*> a_list;
//向a_list内部添加若干元素
std::list<A*> b_list = a_list;
b_list.clear();
请问:此时a_list内部还会有元素存在吗?
我做了测试,发现a_list内部是没有改变。这里的“=”是将a_list内部的元素全部复制成b_list内部去了吗?以至于形成了两个不同名,但是内容相同的list?
class A; //已经存在的类
std::list<A*> a_list;
//向a_list内部添加若干元素
std::list<A*> b_list = a_list;
b_list.clear();
请问:此时a_list内部还会有元素存在吗?
我做了测试,发现a_list内部是没有改变。这里的“=”是将a_list内部的元素全部复制成b_list内部去了吗?以至于形成了两个不同名,但是内容相同的list?
作者: gaoxinglong_9999 发布时间: 2011-11-29
看看list的拷贝构造函数
作者: ouyh12345 发布时间: 2011-11-29
去哪里呢,谢谢!
引用 1 楼 ouyh12345 的回复:
看看list的拷贝构造函数
看看list的拷贝构造函数
作者: gaoxinglong_9999 发布时间: 2011-11-29
存在
=会复制a_list中的元素到b_list中
=会复制a_list中的元素到b_list中
作者: akirya 发布时间: 2011-11-29
是的,只是一个浅拷贝而已。改变a_list中的内容,b_list中的内容也会做同样的改变。
如果b_list.clear()后,b_list中没有元素了,但是,原先包含在b_list中的元素并没有被析构,因此a_list中的元素当然继续存在。
如果b_list.clear()后,b_list中没有元素了,但是,原先包含在b_list中的元素并没有被析构,因此a_list中的元素当然继续存在。
作者: pathuang68 发布时间: 2011-11-29
下面代码供参考:
C/C++ code
C/C++ code
#include <iostream> #include <list> #include <string> using namespace std; class Student { private: string name; int age; public: Student(string name, int age):name(name), age(age) {} string get_name() { return name; } void set_name(string name) { this->name = name; } int get_age() { return age; } void set_age(int age) { this->age = age; } }; int main(int argc, char* argv[]) { list<Student*> lst_student_one; list<Student*> lst_student_two; Student* stu1 = new Student("Andrew", 10); Student* stu2 = new Student("Bob", 11); Student* stu3 = new Student("Chris", 12); lst_student_one.push_back(stu1); lst_student_one.push_back(stu2); lst_student_one.push_back(stu3); lst_student_two = lst_student_one; for(list<Student*>::iterator it = lst_student_two.begin(); it != lst_student_two.end(); ++it) { cout << (*it)->get_name() << "\t" << (*it)->get_age() << endl; } cout << "++++++++++++++++++++++++++++++++" << endl; stu1->set_name("Albert"); stu1->set_age(13); for(list<Student*>::iterator it = lst_student_one.begin(); it != lst_student_one.end(); ++it) { cout << (*it)->get_name() << "\t" << (*it)->get_age() << endl; } for(list<Student*>::iterator it = lst_student_two.begin(); it != lst_student_two.end(); ++it) { cout << (*it)->get_name() << "\t" << (*it)->get_age() << endl; } cout << "++++++++++++++++++++++++++++++++" << endl; lst_student_two.clear(); for(list<Student*>::iterator it = lst_student_one.begin(); it != lst_student_one.end(); ++it) { cout << "lst_student_one:\t" << (*it)->get_name() << "\t" << (*it)->get_age() << endl; } for(list<Student*>::iterator it = lst_student_two.begin(); it != lst_student_two.end(); ++it) { cout << "lst_student_two:\t" << (*it)->get_name() << "\t" << (*it)->get_age() << endl; } return 0; }
作者: pathuang68 发布时间: 2011-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28