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

2 回目の消去と挿入により無効になります。消去によって返された新しいイテレータで更新する必要があります

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