使用erase和insert替换向量中的元素

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.但是在调用此函数时,根本不会更改向量.我不确定我是否正确使用擦除和插入功能.有任何想法吗?

ale*_*der 9

首先,您需要通过引用传递矢量,而不是按值传递.

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)


Ker*_* SB 5

有一个针对您问题的现成算法

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