如何使用移除擦除习语去除向量中的空向量?

时间:2011-12-13 15:26:44

标签: c++ idioms

使用像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());

3 个答案:

答案 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());