gpt4 book ai didi

c++ - std::vector 迭代器和调整大小/保留的奇怪/有趣的行为

转载 作者:太空狗 更新时间:2023-10-29 20:34:02 24 4
gpt4 key购买 nike

我有两段非常相似的代码;这个:

std::vector<int> fail{0};
fail.reserve(2);
std::vector<int>::iterator it1 = fail.begin(), it2 = fail.begin() + 1;
fail.push_back(0);
it1 == it2;

它抛出一个“vector 迭代器不兼容”的异常,并且:

std::vector<int> fail{0, 0};
fail.reserve(3);
std::vector<int>::iterator it1 = fail.begin(), it2 = fail.begin() + 1;
fail.push_back(0);
it1 == it2;

这不是。这似乎是由于 it2 在第一个示例中是 vector 的末尾,但在第二个示例中不是,但我只想全面澄清为什么第一个抛出而第二个抛出没有。

作为引用,我正在使用 MSVC。

最佳答案

std::vector::push_back 总是使尾后迭代器无效,所以在第一种情况下 it2。无论调整大小如何,都会发生这种情况。

如果 vector 没有重新分配,所有其他迭代器将保持完整,这就是为什么它们的第二个代码片段没问题。

关于c++ - std::vector 迭代器和调整大小/保留的奇怪/有趣的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598479/

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