问题
I have some trouble with removing a empty vector in a vector using the remove-erase idiom like Erasing elements from a vector. How can I apply this on:
vector<vector<Point> > contours; // want to remove contours.at(i).empty()
contours.erase(remove(contours.begin(), contours.end(), ??? ),contours.end());
回答1:
Have you tried:
contours.erase(remove(contours.begin(), contours.end(), vector<Point>()), contours.end());
回答2:
Use remove_if
that takes a predicate.
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()
);
回答3:
use 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());
来源:https://stackoverflow.com/questions/8491725/how-to-use-remove-erase-idiom-for-removing-empty-vectors-in-a-vector