如果 vector<int>里有 1 ,2 ,3 ,4 ,5 个元素 删除 3 (执行 erase)
请教: 1.后续的 4 ,5 会移动到 3 前面吗? 2.erase 会触发 vector 缩小容量吗?(既然 push 的操作会触发扩容,erase 会不会触发缩小容量?)
1
tool2d 2023-02-23 10:57:15 +08:00 1
后续元素肯定会向前移动,vector 内存是保证连续的,只有移动才能保证这点。
自动缩小容量似乎很难,malloc 一大片内存后,直接砍一半,好像没这种 api 。 频繁内存分配和搬运,是很影响性能的,一般来说能不碰,就不碰。 |
2
levelworm 2023-02-23 11:30:11 +08:00 via Android 1
千万别在循环里删。。。
|
3
vcyuyu 2023-02-23 11:42:49 +08:00 1
2. 一般不认为 erase 会影响 capacity
|
4
changnet 2023-02-23 12:16:25 +08:00
1. 会移动
2. vector 的元素数量会减 1 。但内存不会释放,作为预留空间。如果要释放,C++11 之后可以调用 shrink_to_fit 。同样的 push 如果有可用的预留空间,也不一定会触发内存分配 |