How to use remove-erase idiom for removing empty vectors in a vector?

坚强是说给别人听的谎言 提交于 2019-12-24 00:43:00

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!