【发布时间】:2020-03-10 00:25:59
【问题描述】:
我正在尝试在 C++ 中使用 std::vector,特别是 std::string 类型之一。但是,当我尝试将元素插入 std::vector 并打印出来时,迭代器的行为很奇怪。
以下代码仅打印“Segmentation Fault”:
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() 显示的行为不匹配,它似乎也与在线的任何其他示例不匹配,而且我似乎无法弄清楚为什么它会打印“分段错误”,如果您尝试打印一个不存在的元素,我会假设会发生这种情况,或者至少当我在一个空向量上测试这个理论时会发生这种情况。
【问题讨论】:
-
在
insert之后不要相信it仍然有效。 -
你专门引用的教程cmets "//
it已经失效了,换一个新的:"
标签: c++ vector iterator segmentation-fault