Как использовать метод удаления-стирания для удаления пустых векторов в векторе? - PullRequest
2 голосов
/ 13 декабря 2011

У меня возникли проблемы с удалением пустого вектора в векторе с использованием идиомы remove-erase, например Стирание элементов из вектора .Как я могу применить это к:

vector<vector<Point> > contours; // want to remove contours.at(i).empty()
contours.erase(remove(contours.begin(), contours.end(), ??? ),contours.end());

Ответы [ 3 ]

10 голосов
/ 13 декабря 2011

Вы пробовали:

contours.erase(remove(contours.begin(), contours.end(), vector<Point>()), contours.end());
5 голосов
/ 13 декабря 2011

Используйте 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 голосов
/ 13 декабря 2011

использовать 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());
...