下面这篇博客中提到了Vector中元素地址的变化问题, 但面对的问题是一开始vector是空的, 于是可以直接先reserve()一个大小。
https://blog.csdn.net/wuhuaiyu/article/details/45953643
但如果一开始先将vector resize()了大小,用for语句赋了初始元素的值; 之后又不断push_back值, 每次push_back之后都记录新加入的元素的地址(之后用)。
在这种情况下,将reserve() 放在resize() 和for语句赋了元素的值 的后面, 就会有问题, 因为reserve() 就可能重新分配内存,之前记录的用for语句赋了值的元素的地址就会变化,之前记录的元素地址就不对了。
因此,reserve() 应该放在任何记录元素的地址的代码之前。可以放在resize() 之前,也可以放在resize()后面。
祖国翔, 2020年2月于上海更新,zuguoxiang@foxmail.com