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。但是在调用此函数时,根本不会更改向量。我不确定我是否正确使用擦除和插入功能。有什么想法吗?
答案 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
,因此您可以访问您传递的对象。
不要擦除元素,只需将其替换即可。