std::vector的resize 迭代器
时间: 2024-08-16 15:02:14 浏览: 38
关于vector迭代器失效的几种情况总结
5星 · 资源好评率100%
`std::vector` 的 `resize()` 函数是一个用于调整向量大小的操作。它有两个版本:一个是设置向量的新容量,另一个是在指定位置插入元素并保持原有元素。
当你调用 `vector.resize(new_size)` 时,如果没有提供第二个参数,它会简单地将向量的容量扩大到新的尺寸,但如果原长度小于新长度,向量的末尾会被填充默认值(如`0` 或 `nullptr`),不会改变原有的迭代器状态。这意味着如果你有指向当前元素的迭代器,它在扩容后依然有效,但是指向的位置可能会变。
如果你提供一个第二个参数,比如 `vector.resize(new_size, value)`, 它会在 `new_size` 和原始长度之间插入指定的值,并更新所有后续元素的位置。这时,原来的迭代器就不再指向之前的位置,需要通过更新来继续访问正确的元素。
关于迭代器的行为,这里有几个关键点需要注意:
1. 调整前后的迭代器仍然指向向量原来的位置,直到它们被移动或者跨越了调整区域。
2. 如果你希望更新迭代器指向新插入或扩展部分的元素,应该使用 `vector.begin()` 或 `vector.end()` 获取新的范围。
阅读全文