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

时间:2013-04-14 11:56:40

标签: c++ vector insert iterator 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);

        }
    }

}

所以,我希望这个函数用字符串替换替换向量中所有出现的字符串old。但是在调用此函数时,根本不会更改向量。我不确定我是否正确使用擦除和插入功能。有什么想法吗?

3 个答案:

答案 0 :(得分:9)

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

void replace(vector<string>& my_vector_2, string old, string replacement){

第二次擦除并插入invalidates它,你需要用擦除返回的新迭代器更新它

it = my_vector_2.erase(it);  
it = my_vector_2.insert(it,replacement);

答案 1 :(得分:4)

您的问题有一个现成的algorithm

#include <algorithm>
#include <string>
#include <vector>

std::vector<std::string> v;  // populate

std::replace(v.begin(), v.end(), "old", "new");

答案 2 :(得分:2)

您将std::vector作为值传递。要更改传递给函数的std::vector,请将其声明为引用

void replace(vector<string>& my_vector_2, string old, string replacement){ }

&表示您通过引用传递了std::vector,因此您可以访问您传递的对象。

不要擦除元素,只需将其替换即可。