为什么添加新项时list.end()不改变?
Why does list.end() not change when new item is added?
我正在做一个有两个列表的程序。其中一个列表存储对象。另一个列表存储指向包含对象的列表项的指针。当一个新项目被添加到对象列表时,我想要获得指向该对象的指针。但我总是得到相同的指针返回。
由于我的程序现在太大了,我做了一个新的,更小的来展示问题:
#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
我希望程序打印出两个不同的指针,因为列表的结束应该改变?为什么它给我两个相同的指针?
我真的很感激你在这件事上的帮助。
对于初学者来说,解引用成员函数end
返回的迭代器具有未定义的行为。
我想你是指
C_Test * p = &Testlist.back();
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 变量没有改变?通过向量的函数调用
- 如何改变c++应用程序的视觉效果
- C++在不同线程中改变向量
- 如何访问和改变存储在矢量C++中的对象
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 反转依赖于 end() 的迭代器
- 为什么 c++ 动态数组的大小没有改变?
- std::multimap<std::chrono::milliseconds, T>::rbegin 在 MSVS-13 中指向 end()?
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 为什么提升图库的 read_graphviz() 函数会改变节点的索引
- 在向量内更改变量的值不会改变其在向量外的值
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 改变或缩放两个正态分布以具有特定的相关系数
- 在 ifcondition al中 find() C++ STL 中的 == a.end() 有什么用?
- std::list 的 end() 迭代器位置在擦除时会改变吗?
- 为什么添加新项时list.end()不改变?