删除std :: vector <std :: string> </std :: string>中的元素

时间:2014-07-10 14:15:19

标签: c++ vector element

我正在尝试使用C ++向量而不是C数组,但我遇到了一些问题。这是我的代码:

size_t i;
//Filter save files
for (i = 0; i != files.size(); i++){
    cout << files.at(i).find(FILE_HEAD) << ' ' << files.at(i) << endl;
    if ((files.at(i).find(FILE_HEAD) != 0)){
        files.erase(files.begin() + i);
    }
}
cout << "Found files:\n";
for (i = 0; i != files.size(); i++){
    cout << i << " - " << files.at(i) << endl;
}

filesstd::vector<std::string>,我想删除所有不包含FILE_HEAD的元素。但这不能正常工作,在我的测试中file.size()是14,但它只进行了7次。谁能帮我?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用:

files.erase(std::remove_if(files.begin(),files.end(),
            [](const std::string& str){return str.find(FILE_HEAD) == std::string::npos;}),
            file.end());

答案 1 :(得分:0)

问题如下:当你删除i - 元素时,你仍然会增加i,所以你跳过了一个元素。尝试在i--;之后添加files.erase(files.begin() + i);来修复它(仅用于测试!)。但请不要发明这样的自行车!最好使用std :: remove_if instaed这样有问题的实现。