Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用vector.insert()时出现运行时异常_C++_Vector_Iterator - Fatal编程技术网

C++ 使用vector.insert()时出现运行时异常

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);

所以我有下面的代码,它应该使用迭代器来替换向量中的元素,如果它匹配某个给定值“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);
参考插入(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);
        }   
    }
}