gpt4 book ai didi

C++ map::erase() 不删除数据

转载 作者:行者123 更新时间:2023-11-30 01:11:38 30 4
gpt4 key购买 nike

我正在尝试使用以下代码测试 C++ map::erase():

//file user.h
#include <string>
#include <fstream>
#include <cstring>

using namespace std;

class User {
string name;
int id;
public:
User(const string& name, int id) : name(name), id(id) {}
int getID() const {return id;}
~User(){}
};

//file main.cpp
#include "user.h"
using namespace std;

typedef map<string, User*> Dict;

int main()
{
Dict dict;
dict["Smith"] = new User("Smith", 666); //Id = 666
dict["Adams"] = new User("Adams", 314); //Id = 314


auto it = dict.find("Adams"); //look for user 'Adams'

if (it == dict.end())

//show 'not Found' if didn't find 'Adams'
cout << "not Found" << endl;

else
//else, show the Id = 314
cout << "id1: " << it->second->getID() << endl;


//Here I think there is a problem
//I ask to delete Adams from the list
dict.erase(it);
//So in this print the ID shouldn't be found
cout << "id2: " << it->second->getID() << endl;

return 0;
}

在我尝试从列表中删除项目后,它似乎没有被删除,因为程序显示如下:

pc@pc:~/Test$ ./main
id1: 314
id2: 314

据我所知,id2 不应显示任何值。这很好还是我误解了 erase 的用法。如果是,显示后如何删除?

最佳答案

你在未定义的行为领域。修改 map 后,您正在使用迭代器 (it)。任何事情都有可能发生——包括明显的工作(一点点)。你应该重做

auto it = dict.find("Adams"); //look for user 'Adams'

这不会找到任何东西

关于C++ map::erase() 不删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35657631/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com