参考博文: https://blog.csdn.net/m0_61982936/article/details/132548446
此前一直没有注意到vector的失效情景,但仔细思考下发现有很多失效的坑。
首先需要明确的是vector的扩容:
有两个参数
size:指的是vector当前元素多少
capacity:指的是vector的容量,也即max_size。
如果size >= capacity时就会发生扩容,拷贝元素并且释放旧空间。通常采用1.5倍扩容或者2倍扩容。这种倍数扩容的原因是,希望第N次扩容时如果能够复用前N-1次释放的空间。
因此,如果采用2倍扩容法,前N-1次累计申请的空间为2(n-1)-1,第N次申请的空间为2n-1 。根据ax 这种函数的特性,a<2时能够使得前n-1次申请的空间大于第n次申请的空间。如果倍数大于2,不仅会导致无法使用前面释放的内存,还会导致空间浪费。
当然,为了避免动态扩容导致的效率低下,因此若能在插入之前预估好vector的存储数量,那么就能减少这类情况。这里使用reserve就能实现修改capacity。
迭代器
迭代器本质是类模板,参照指针的用法重写了->等方法。但由于vector的扩容机制,push_back、erase、insert等都会导致迭代器失效。因此慎用迭代器
https://blog.csdn.net/xp178171640/article/details/104905338
1197

被折叠的 条评论
为什么被折叠?



