我有由几个元素组成的STL vector 。我需要遍历此 vector 并删除符合某些条件的元素。所以我写了这段代码

for (int j = imageDataVector.size()-1; j >= 0; j--) {
    if(imageDataVector[i] < threshold)
        imageDataVector.erase(imageDataVector.end() - j);
}

这段代码在几乎所有情况下都可以正常工作,但是,如果vector的所有元素都符合条件,我会报错:
vector erase iterator outside the range

如果 vector 中只剩下一个元素,则会发生此错误。我做错了什么?

最佳答案

if(imageDataVector[i] < threshold)
        imageDataVector.erase(imageDataVector.end()-j);

应该可能是:
if(imageDataVector[j] < threshold)
        imageDataVector.erase(imageDataVector.begin()+j);

编辑:出于完整性,删除删除方式和迭代器方式:
imageDataVector.erase(std::remove_if(imageDataVector.begin(), imageDataVector.end(), std::bind2nd(std::less<vector_data_type>(), threshold)), imageDataVector.end());

vector<type>::iterator it = imageDataVector.begin();
while (it != imageDataVector.end()) {
  if (*it < threshold)
    it = imageDataVector.erase(it);
  else
    ++it;
}

10-06 01:44