gpt4 book ai didi

C++: map 元素在内存中是固定的吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:22 26 4
gpt4 key购买 nike

我们可以说 std::map 的元素(对)是静止的吗?使用 g++ 进行的快速测试表明,插入元素后,它会停留在内存中的同一位置。

定义:

struct K { ... }; // Holds an int, prints when constructed, destructed etc..
struct V { ... }; // Holds an int, prints when constructed, destructed etc..
typedef std::map<K,V> M;
M m;

第一次插入后调试打印:

======= ADDRESS #1
DEBUG: M::const_iterator i = m.find(10)
K(10)
K.~K; value == 10
DEBUG: &*i == 0x1e6b030
DEBUG: &i->first == 0x1e6b030
DEBUG: &i->second == 0x1e6b034

稍后调试打印许多插入物:

======= ADDRESS #2
DEBUG: M::const_iterator i = m.find(10)
K(10)
K.~K; value == 10
DEBUG: &*i == 0x1e6b030
DEBUG: &i->first == 0x1e6b030
DEBUG: &i->second == 0x1e6b034

我们是否在标准中明确或隐含地保证元素在插入后保留在内存中的位置?我们有单独的键或值吗?

最佳答案

摘自第 23.1.2/8 节(关联容器):

The insert members shall not affect the validity of iterators and references to the container, and the erase members shall invalidate only iterators and references to the erased elements.

所以 map 元素保证在内存中保持静止

关于C++: map 元素在内存中是固定的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082294/

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