gpt4 book ai didi

c++ - STL 允许使用指向不同 map 的迭代器删除 map 的键/值吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:44 24 4
gpt4 key购买 nike

所以,我偶然发现的是:

std::map<double, int> map1;
std::map<double, int> map2;

map1[2.5] = 11;
map1[3.5] = 12;

map2[2.5] = 21;
map2[3.5] = 22;

std::map<double, int>::iterator iterMap1 = map1.find(2.5);

//I will now try to erase a key/value pair in map2 with an iterator
//that points to map1. This is bad/wrong. But I am surprised
//this is allowed.
map2.erase(iterMap1);

//what do you think would be printed?
print(map1);
print(map2);

有人可以解释一下这种行为吗?我认为这不应该被允许。

我得到的输出是:

Map1
2.5 11

Map2
2.5 21
3.5 22

这对我来说没有意义。谢谢。

最佳答案

什么叫允许?它在标准中是不允许的,并且会导致未定义的行为,但这并不意味着编译器必须对您的尝试大喊大叫。

在一般情况下,编译器无法检查这一点。映射和迭代器可以传递给函数,没有任何方法可以知道迭代器是否引用容器,因此不能强制编译器对其进行诊断。

编写有效且正确的程序取决于程序员。编译器只是提供帮助,而不是照看 child 。

关于c++ - STL 允许使用指向不同 map 的迭代器删除 map 的键/值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18924734/

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