gpt4 book ai didi

c++ - vector::iterator 和 set::iterator 的原理区别

转载 作者:行者123 更新时间:2023-11-27 23:19:33 28 4
gpt4 key购买 nike

我在C++\STL的试卷中看到过这样的问题。

有什么想法吗?

这可能与以下事实有某种联系,即删除集合中的元素会导致 vector 中的“删除后的所有”迭代器以及集合中已删除的迭代器失效?

最佳答案

与迭代器本身相比,差异更多地与容器的不同性质有关。

一个方面与这些容器的“已排序/未排序”性质有关:您不能修改位于已排序容器内的元素,因为它会破坏顺序。

另一方面与“压缩/扩展”存储机制有关:vector 中的元素一起存储在单个分配 block 中,set(或列表)中的元素单独存储。因此, vector 中的插入/删除会导致元素位移的变化。在集合或列表中插入/删除只会导致重新链接,所有现有元素都保留在它们的位置(因此不会使引用它们的迭代器无效)

另一方面 - 总是与存储相关 - 是 vector::iterator 是“随机访问”:++i, i+=3, i+=100 需要相同的时间,因为位移可以进行算术计算。在集合(和“链接容器”)中,迭代器只是“双向”:++i 和 --i 是立即计算的,但 i+=5 或 i+=100 需要完全不同的时间(需要至少线性循环)

关于c++ - vector::iterator 和 set::iterator 的原理区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275323/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com