我正在使用CGAL的Kd树实现以及模糊球体作为查询对象来获取包围在以点为中心的半径r_max
的球体中的点。这是最小的工作示例:
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Kd_tree.h>
#include <CGAL/Search_traits_2.h>
#include <CGAL/Fuzzy_sphere.h>
#include <iostream>
#include <fstream>
typedef CGAL::Simple_cartesian<double> K;
typedef K::Point_2 Point;
typedef CGAL::Search_traits_2<K> TreeTraits;
typedef CGAL::Kd_tree<TreeTraits> Kd_tree;
typedef Kd_tree::Tree Tree;
typedef CGAL::Fuzzy_sphere<TreeTraits> Sphere;
int main(int argc, char* argv[])
{
double r_max;
Tree tree;
/* ... fill the tree with points, set the value of r_max ...*/
// Report indices for the neighbors within a sphere
unsigned int idc_query = tree.size()/2; // test index
Tree::iterator kti = idc_query + tree.begin();
Sphere s_query(*kti, r_max);
// Print points
tree.search(std::ostream_iterator<Point>(std::cout, "\n"), s_query);
return 0;
}
我从CGAL示例的Spatial_searching文件夹下的nearest_neighbor_searching.cpp文件中获取并修改了评论“打印点”下面的行(我的版本是3.9)。
问题是:我有没有办法设置一个不同的OutputIterator
(而不是std::ostream_iterator
)来存储指针/迭代器/句柄到搜索容器中的点所产生的点将点的坐标打印到标准输出?而不是?谢谢。
答案 0 :(得分:4)
在C ++标准库中,有五种迭代器:
有关详细信息,请参阅cplusplus.com
在您的情况下,您需要一个输出迭代器,即一个可以递增(it
)和取消引用的对象++it
({{1}获取非const引用,可以写入。
您可以创建一个输出迭代器,使用std::back_inserter
插入容器末尾写入的所有项目:
*it
答案 1 :(得分:0)
CGAL已经发展了一些东西,那就是你可以储存除点之外的其他东西。请查看用户手册中的Examples for Using an Arbitrary Point Type with Point Property Maps。