如果我取一个std::vector
的地址,并在插入元素后重新分配,我可以假设它的地址没有改变吗?
感谢。
答案 0 :(得分:8)
是的,在C ++中你可以放心地假设。但是,第一个元素&x[0]
的地址可以更改,这些地址不相同。 编辑:当然,其他元素的地址也是如此。
顺便说一句,第一个元素的地址是否可能保持或多或少稳定取决于whether or not the growth factor of the array is less than the golden ratio,这对于了解IMO来说是一个非常酷的事实。
答案 1 :(得分:3)
如果我取一个
std::vector
的地址,并在插入元素后重新分配,我可以假设它的地址没有改变吗?
你实际上总是假设某个变量的地址由于调用了它的任何行为而没有变化(这是不可能的,因为语言语法可以防止它。您不能简单地用任意值替换this
。
重新分配是std::vector
的行为,适用于它的基础数据结构(即std::vector::data()
),并且从这些重载中获取的指针不稳定此行为可能会发生变化(对于具有偏移的任何其他地址,例如来自ptr = &myVector[5];
)。