C++ std::矢量迭代器行为奇怪,不允许增量

C++ std::vector iterator acting strange, won't allow incrementation

本文关键字:不允许 std 迭代器 C++      更新时间:2023-10-16

我正在尝试在 c++ 中使用std::vector,特别是类型std::string的一种。但是,当我尝试将元素插入std::vector并打印出来时,迭代器的行为很奇怪。 以下代码仅打印"分段错误":

std::vector<std::string> request;
auto it = request.begin();
request.insert(it, "foo");
request.insert(++it, "bar");
std::cout << request.front() + "n";

当我保持迭代器不变时,代码还会打印"分段错误",即如果我不尝试递增它。如果我注释掉在代码中插入"bar"的行,即没有it增量(++it),代码会打印"foo"。此外,我可以使用request.begin()request.end()添加"bar",它会打印正确的东西(分别为"bar"或"foo")。我在这里问这个是因为这种行为与 cplusplus.com 上给出的std::vector.insert()教程中显示的行为不匹配,似乎也与在线上的任何其他示例不匹配,而且我似乎无法弄清楚为什么它会打印"分段错误",如果您尝试打印不存在的元素,我认为会发生这种情况, 或者至少当我在一个空向量上测试这个理论时,这就是发生的事情。

问题是it不需要成为有效的迭代器,之后

request.insert(it, "foo");

因此,在下一行中使用++it,如

request.insert(++it, "bar");

是未定义行为的原因。

您可以使用

it = request.insert(it, "foo");
request.insert(++it, "bar");