我正在尝试在 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");