无法跟踪Map在C++中的工作方式

Ras*_*yak 0 c++ map

在下面的代码中,而不是将输出视为

0 -> 1 2
1 -> 2 3
..
..
99 ->100 101
Run Code Online (Sandbox Code Playgroud)

我得到输出,

0 -> 100 101
1 -> 100 101
...
99 -> 100 101
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题,究竟哪里出错了?我发现调试时,在第一次迭代中它存储

0 -> 1 2
Run Code Online (Sandbox Code Playgroud)

它更新的第二次迭代,如,

0 -> 2 3
1 -> 2 3
Run Code Online (Sandbox Code Playgroud)

为什么?

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;
}
Run Code Online (Sandbox Code Playgroud)

sta*_*ust 7

ab = new abc();
Run Code Online (Sandbox Code Playgroud)

你只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));
}
Run Code Online (Sandbox Code Playgroud)