在下面的代码中,而不是看到输出为
0 -> 1 2
1 -> 2 3
..
..
99 ->100 101
我正在输出,
0 -> 100 101
1 -> 100 101
...
99 -> 100 101
请帮助我如何解决此问题,究竟问题出在哪里?
我发现调试时,在第一次迭代中它存储
0 -> 1 2
它更新的第二次迭代,
0 -> 2 3
1 -> 2 3
为什么?
class abc{
public:
int x, y;
};
std::map<int, abc*> MAP;
int main()
{
abc *ab;
ab = new abc();
int i = 0;
for(i = 0; i < 100; i++)
{
ab->x = i + 1;
ab->y = i + 2;
MAP.insert(std::pair<int, abc*>(i, ab));
}
map<int, abc*>::iterator it;
for(it = MAP.begin(); it != MAP.end(); it++)
{
cout << it->first << "->" << it->second->x <<" "<< it->second->y << endl;
}
system("pause");
return 0;
}
最佳答案
ab = new abc();
您只分配了一个
abc
。并且您不断在循环中对其进行修改,然后重新插入指向它的指针。因此,映射的所有second
值都指向相同的单个abc
。abc *ab;
// ab = new abc();
//
//
for(i = 0; i < 100; i++)
{
ab = new abc();
^^^^^^^^^^^^^^
ab->x = i + 1;
ab->y = i + 2;
MAP.insert(std::pair<int, abc*>(i, ab));
}
关于c++ - 无法追踪Map在C++中的运作方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16089624/