2016-11-13 114 views
0

我正在研究一个有两个列表的程序。列表中的一个存储对象。另一个列表存储指向包含对象的列表项的指针。当一个新项目被添加到对象列表中时,我想获取指向该对象的指针。但我总是得到相同的指针返回。为什么list.end()在添加新项目时没有改变?

因为我的计划是到大,现在我做了一个新的,一个小的为您展示问题:

#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 

我期望PROGRAMM打印出两个不同的自列表结束后的指针应该改变了?为什么它给了我两次相同的指针?

我真的很感谢你在这件事上的帮助。

+1

为什么你会希望它真正改变? –

+4

'&* Testlist.end()'是未定义的行为。 – Cornstalks

+2

'.end()'不是最后一个项目,也不是一个项目。这是*最后一个*之后的*假*项目。因为它只是一个标记它并不存在于列表本身中。 – HolyBlackCat

回答

3

对于取消引用成员函数end返回的迭代器的初学者有未定义的行为。

我想你的意思

C_Test * p = &Testlist.back(); 
+0

随着你的代码我不幸地得到以下错误: '[错误]不能转换'std ::列表 :: iterator * {aka std :: _ List_iterator *}'在初始化中的'C_Test *' –

+0

@A .Pope这与我所展示的代码没有任何共同之处。 –

+0

@ A.Pope无法重现。 http://ideone.com/gogWlt – HolyBlackCat

相关问题