【发布时间】:2023-03-27 08:55:01
【问题描述】:
我是否正确假设向 std::map 添加/删除元素不会影响其他元素(即导致它们在内存中重新定位),因此以下内容是安全的:
我查看了有关容器信息的各个站点,但只发现了迭代器无效的情况,我已经知道了......
std::map<std::string,std::string> map;
PopulateMap(map);
std::string &a= map["x"];
AddMoreData(map);
RemoveRandomKeysExceptX(map);
map["x"] = "foo";
std::cout << a << " " << map["x"] << std::endl;//prints "foo foo"
a = "bar";
std::cout << a << " " << map["x"] << std::endl;//prints "bar bar"
我在 VC9 上测试了一些类似的代码,这似乎可以工作,但这并不意味着我不只是幸运,也不意味着它不会因编译器而异。
【问题讨论】:
-
不知道为什么你删除了你的答案 nadeen,据我所知它是正确的。
-
naveen 的回答是关于迭代器,这个问题不是
-
我也删除了我的答案,因为在二读时我完全不清楚实际问题是什么。
-
完全重复:正如 litb 指出的那样:stackoverflow.com/questions/516007/…