Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This is an older version of Boost and was released in 2021. The current version is 1.90.0.
Boost.Range filtered range adaptor is adapted to Boost.Geometry
Boost.Range filtered range adaptor filters a range.
The Boost.Range filtered range adaptor takes over the model of the original geometry, which might be:
#include <boost/geometry/geometries/adapted/boost_range/filtered.hpp>
The standard header boost/geometry.hpp
does not include this header.
Shows how to use a Boost.Geometry linestring, filtered by Boost.Range adaptor
#include <iostream> #include <boost/geometry.hpp> #include <boost/geometry/geometries/linestring.hpp> #include <boost/geometry/geometries/point_xy.hpp> #include <boost/geometry/geometries/adapted/boost_range/filtered.hpp> struct not_two { template <typename P> bool operator()(P const& p) const { return boost::geometry::get<1>(p) != 2; } }; int main() { typedef boost::geometry::model::d2::point_xy<int> xy; boost::geometry::model::linestring<xy> line; line.push_back(xy(0, 0)); line.push_back(xy(1, 1)); line.push_back(xy(2, 2)); line.push_back(xy(3, 1)); line.push_back(xy(4, 0)); line.push_back(xy(5, 1)); line.push_back(xy(6, 2)); line.push_back(xy(7, 1)); line.push_back(xy(8, 0)); using boost::adaptors::filtered; std::cout << boost::geometry::length(line) << std::endl << boost::geometry::length(line | filtered(not_two())) << std::endl << boost::geometry::dsv(line | filtered(not_two())) << std::endl; return 0; }
Output:
11.3137 9.65685 ((0, 0), (1, 1), (3, 1), (4, 0), (5, 1), (7, 1), (8, 0))