C++ 使用vector.insert()时出现运行时异常
所以我有下面的代码,它应该使用迭代器来替换向量中的元素,如果它匹配某个给定值“old”C++ 使用vector.insert()时出现运行时异常,c++,vector,iterator,C++,Vector,Iterator,所以我有下面的代码,它应该使用迭代器来替换向量中的元素,如果它匹配某个给定值“old” 使用StringIter=std::vector; 使用StringVec=std::vector; void replace(StringVec ref,std::string old,std::string replacement) { for(StringIter::iterator it=ref.begin();it!=ref.end();it++) { 如果(*it==旧) { 参考擦除(it);
使用StringIter=std::vector;
使用StringVec=std::vector;
void replace(StringVec ref,std::string old,std::string replacement)
{
for(StringIter::iterator it=ref.begin();it!=ref.end();it++)
{
如果(*it==旧)
{
参考擦除(it);
参考插入(it,替换);
}
}
}
但是,我得到以下运行时错误:“vector emplace迭代器超出范围”。我尝试过改变擦除和插入的顺序,并使用insert(it-1,…)代替,但它不起作用。在谷歌搜索了一个多小时后,还没有找到任何解决这个问题的方法。看起来你只是想更换而不是调用
erase
和insert
ref.erase(它)代码>使向量中的及其后的所有迭代器无效。执行此操作后,您不能使用其中任何一个,包括end()
迭代器。该代码还有许多奇怪之处:StringIter
不是迭代器,而是向量,StringVec ref
不是引用,old
和replacement
很可能都是const references
,整个代码段可以替换为我知道这可以做得更简单,但它是用于一个赋值,其中特别要求我们使用erase()和insert()成员函数。
using StringIter = std::vector<std::string>;
using StringVec = std::vector<std::string>;
void replace(StringVec ref, std::string old, std::string replacement)
{
for (StringIter::iterator it = ref.begin(); it != ref.end(); it++)
{
if (*it == old)
{
ref.erase(it);
ref.insert(it,replacement);
}
}
}