为什么list.end()在添加新项目时不会更改?

时间:2016-11-13 16:19:04

标签: c++ list iterator

我正在开发一个有两个列表的程序。其中一个列表存储对象。另一个列表存储指向包含对象的列表项的指针。当一个新项添加到对象列表时,我想获得指向该对象的指针。但我总是得到相同的指针返回。

由于我的程序很大,我现在制作了一个新的,较小的程序来向您展示问题:

#include <iostream>
#include <list>

using namespace std;

class C_Test
{
    public:
        int a;
};

int main()
{
    std::list<class C_Test> Testlist;
    C_Test A;
    C_Test B;
    Testlist.push_back(A);
    C_Test * p = &*Testlist.end();
    cout << p << endl;
    Testlist.push_back(B);
    p = &*Testlist.end();
    cout << p;  
}

结果:

0x22fe20
0x22fe20

我希望程序打印出两个不同的指针,因为列表的末尾应该已经改变了?为什么它会给我两倍相同的指针?

我非常感谢你在这件事上的帮助。

1 个答案:

答案 0 :(得分:3)

对于启动程序,取消引用成员函数end返回的迭代器具有未定义的行为。

我认为你的意思是

 C_Test * p = &Testlist.back();