gpt4 book ai didi

c++ - C++ 的 Vector 元素顺序

转载 作者:太空狗 更新时间:2023-10-29 23:52:35 27 4
gpt4 key购买 nike

下面的一段c++代码给出了

int main()
{
vector <int> myvect(3,0);
vector <int> :: iterator it;
it = myvect.begin();
myvect.insert(it,200);
myvect.insert(it+5,400); //Not sure what 5 makes the difference here
cout << myvect[0] << endl << myvect[1];
}

输出:

200
400

同样的代码稍作改动就可以

int main()
{
vector <int> myvect(3,0);
vector <int> :: iterator it;
it = myvect.begin();
myvect.insert(it,200);
myvect.insert(it+4,400); //Not sure what 4 makes the difference here
cout << myvect[0] << endl << myvect[1];
}

输出:

400
200

有人能告诉我为什么向迭代器添加 4 或 5 会改变元素的顺序吗?

谢谢

最佳答案

您的程序有未定义的行为

您正在创建一个包含 3 个元素的 vector (全部初始化为 0),并且您在 v.begin() + 5 位置插入元素,该位置超出了 vector 的末尾。

此外,在 before it 指向的位置插入元素之后,您正在使用迭代器 (it)。根据 C++11 标准的第 23.3.6.5/1 段:

[...] If no reallocation happens, all the iterators and references before the insertion point remain valid. [...]

因此,迭代器it本身在语句myvect.insert(it, 200)之后并不能保证在下一条指令中使用它(myvect.insert(it + 4, 400)) 又是未定义行为。

您不能对具有未定义行为的程序抱有任何期望。它可能会崩溃,给您带来奇怪的结果,或者(在最坏的情况下)表现得如您所愿。

关于c++ - C++ 的 Vector 元素顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15058363/

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