我正在编写一个算法,该算法应该从存储在向量中的一组点中删除我提供的任何矩形列表中的每个元素。
我也将它用作 C++11 的测试场,因此,由于我仍然习惯于新功能,我想知道这是否是一种有效的方法,或者它是否有一些特殊的缺陷,我没有得到。
vector<tuple<u16, u16, u16, u16>> limits;
FOR_EACH_AREA_TO_REMOVE
limits.push_back(make_tuple(
area->x - VIEWPORT_SIZE_X/2,
area->x + VIEWPORT_SIZE_X/2,
area->y - VIEWPORT_SIZE_Y/2,
area->y + VIEWPORT_SIZE_Y/2));
FOR_EACH_AREA_TO_REMOVE_END
vector<Point2D> points;
remove_copy_if(suitablePoints.begin(), suitablePoints.end(),
points.begin(), [&](const Point2D &point) {
for (auto limit : limits)
if (point->x > get<0>(limit) &&
point->x < get<1>(limit) &&
point->y > get<2>(limit) &&
point->y < get<3>(limit))
return true;
return false;
}
);
这似乎是该问题的更简单的解决方案,创建一个必须从点集中排除的边界向量,然后迭代设置点。我想知道是否有更好的方法来解决这个问题。我想指出点的集合可能很大,而矩形的集合确实足够有限。