此问题在此处已有答案:
Iterator invalidation rules for C++ containers(6个答案)
What is iterator invalidation?(3个答案)
6小时前关门了。
请看下面的MRE:
#include <iostream>
#include <vector>
#include <iterator>
void display(const std::vector<std::string> &v){
for(int i = 0; i < v.size(); i++){
std::cout << v[i] << " ";
}
std::cout << std::endl;
}
int main(){
std::vector<std::string> vect1;
std::vector<std::string>::iterator i1 = vect1.begin();
vect1.push_back("Test");
display(vect1);
std::cout << *i1 << std::endl;
vect1.insert(i1, "Apple");
std::cout << vect1.size() << std::endl;
display(vect1);
return 0;
}
当我尝试使用insert
函数向vect1
添加一个新元素时,矢量内容保持不变(根据display
函数的输出)。
1条答案
按热度按时间j5fpnvbx1#
迭代器
如果
size
的值大于0
,则在for循环(其中新元素被添加到向量中)之后,此语句将变为无效。否则,此语句将调用未定义的行为。
将此语句移到for循环之后。
请注意,消息
不正确。因为迭代器
it
指向向量的第一个元素,所以字符串存储在索引0处。也就是说,您应该使用message