我正在尝试使用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;
}
files
是std::vector<std::string>
,我想删除所有不包含FILE_HEAD
的元素。但这不能正常工作,在我的测试中file.size()
是14,但它只进行了7次。谁能帮我?谢谢!
答案 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这样有问题的实现。