使用像Erasing elements from a vector这样的移除擦除习惯用法删除向量中的空向量时遇到一些问题。我该如何申请:
vector<vector<Point> > contours; // want to remove contours.at(i).empty()
contours.erase(remove(contours.begin(), contours.end(), ??? ),contours.end());
答案 0 :(得分:10)
你试过了吗?
contours.erase(remove(contours.begin(), contours.end(), vector<Point>()), contours.end());
答案 1 :(得分:5)
使用带有谓词的remove_if
。
contours.erase(
std::remove_if(
contours.begin(), contours.end(),
[](const vector<Point>& v) { return v.empty(); }
// or a functor/plain function/Boost.Lambda expression
), contours.end()
);
答案 2 :(得分:2)
使用remove_if。
C ++ 11
contours.erase(
std::remove_if(contours.begin(), contours.end(),
[&](const Vector<Point>& vp){
return vp.empty();
}),
contours.end());
C ++ 03
struct is_empty
{
bool operator()(const Vector<Point>& vp) constt;
{
return vp.empty();
}
}
contours.erase(
std::remove_if(contours.begin(), contours.end(),
is_empty,
contours.end());