+ -
当前位置:首页 → 问答吧 → 请教一个关于stl::list<A*> LIST赋值的问题?

请教一个关于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?

作者: gaoxinglong_9999   发布时间: 2011-11-29

看看list的拷贝构造函数

作者: ouyh12345   发布时间: 2011-11-29

去哪里呢,谢谢!
引用 1 楼 ouyh12345 的回复:

看看list的拷贝构造函数

作者: gaoxinglong_9999   发布时间: 2011-11-29

存在
=会复制a_list中的元素到b_list中

作者: akirya   发布时间: 2011-11-29

是的,只是一个浅拷贝而已。改变a_list中的内容,b_list中的内容也会做同样的改变。

如果b_list.clear()后,b_list中没有元素了,但是,原先包含在b_list中的元素并没有被析构,因此a_list中的元素当然继续存在。

作者: pathuang68   发布时间: 2011-11-29

下面代码供参考:
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

热门下载

更多