Nik*_*rud 7 c++ iterator insert vector erase
void replace(vector<string> my_vector_2, string old, string replacement){
vector<string>::iterator it;
for (it = my_vector_2.begin(); it != my_vector_2.end(); ++it){
if (*it==old){
my_vector_2.erase(it);
my_vector_2.insert(it,replacement);
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我希望这个函数用字符串替换替换向量中所有出现的字符串old.但是在调用此函数时,根本不会更改向量.我不确定我是否正确使用擦除和插入功能.有任何想法吗?
首先,您需要通过引用传递矢量,而不是按值传递.
void replace(vector<string>& my_vector_2, string old, string replacement){
Run Code Online (Sandbox Code Playgroud)
第二次擦除和插入使其无效,您需要使用erase返回的新迭代器更新它
it = my_vector_2.erase(it);
it = my_vector_2.insert(it,replacement);
Run Code Online (Sandbox Code Playgroud)
有一个针对您问题的现成算法:
#include <algorithm>
#include <string>
#include <vector>
std::vector<std::string> v; // populate
std::replace(v.begin(), v.end(), "old", "new");
Run Code Online (Sandbox Code Playgroud)