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

        }
    }

}

所以,我希望这个函数用字符串替换替换向量中所有出现的旧字符串。但是当调用这个函数时,它根本不会改变向量。我不确定我是否正确使用了擦除和插入功能。有任何想法吗?

4

3 回答 3

9

首先,您需要通过引用而不是值传递向量。

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

第二次擦除和插入使其无效,您需要使用擦除返回的新迭代器对其进行更新

it = my_vector_2.erase(it);  
it = my_vector_2.insert(it,replacement);
于 2013-04-14T12:02:23.177 回答
5

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

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

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

std::replace(v.begin(), v.end(), "old", "new");
于 2013-04-14T12:04:21.463 回答
2

您正在传递您std::vector的价值。为了更改std::vector您传递给函数的参数,请将其声明为引用

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

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

并且不要删除元素,只需替换它。

于 2013-04-14T12:02:40.257 回答