我正在尝试使用迭代器构建CGAL::points_d
的向量。我一直收到一条我不明白的错误信息。错误似乎与我尝试将两个向量迭代器传递给CGAL::Points_d
对象的方式有关。我认为它可能围绕指出点的维度的问题,我使用Dynamic_Dimension_Tag
,但我不能弄清楚。信息如下。
error: no matching function for call to ‘std::vector<CGAL::Wrap::Point_d<CGAL::Epick_d<CGAL::Dynamic_dimension_tag> > >::vector(std::vector<int>::size_type, std::vector<std::vector<int> >::iterator, __gnu_cxx::__normal_iterator<std::vector<int>*, std::vector<std::vector<int> > >)’
Vector_of_points points(u.size(), w.begin(), next(w.begin()));
这是我正在使用的一些玩具代码。
#include <iostream>
#include <CGAL/Kernel_d/Point_d.h>
#include <CGAL/Epick_d.h>
#include <iostream>
#include <vector>
typedef CGAL::Epick_d< CGAL::Dynamic_dimension_tag > Kernel;
typedef Kernel::Point_d Point;
typedef std::vector<Point> Vector_of_points;
typedef std::vector<int> dbvec ;
int main() {
dbvec v ;
dbvec u ;
std::vector<std::vector<int>> w;
int size_v = 20;
for(int i=0; i < size_v; ++i){
v.push_back(i);
}
for(int i=size_v; i-- >0; ){
u.push_back(i);
}
w.push_back(u);
w.push_back(v);
w.push_back(u);
Vector_of_points points;
for(int i=0; i < size_v; ++i) {
points.push_back(Point(size_v, w[i].begin(), next(w[i].begin())));
}
std::cout << points.size() << std::endl;
return 0;
}
答案 0 :(得分:0)
我想出了这个问题。它与我在Point()构造函数中设置的迭代器参数的方式有关。这是更新的代码。希望这有助于任何想要填写CGAL积分的人。
#include <iostream>
#include <CGAL/Kernel_d/Point_d.h>
#include <CGAL/Epick_d.h>
#include <iostream>
#include <vector>
typedef CGAL::Epick_d< CGAL::Dynamic_dimension_tag > Kernel;
typedef Kernel::Point_d Point;
typedef std::vector<Point> Vector_of_points;
typedef std::vector<int> dbvec ;
int main() {
dbvec v ;
dbvec u ;
std::vector<std::vector<int>> w;
int size_v = 20;
for(int i=0; i < size_v; ++i){
v.push_back(i);
}
for(int i=size_v; i-- >0; ){
u.push_back(i);
}
w.push_back(u);
w.push_back(v);
w.push_back(u);
Vector_of_points points;
for(int i = 0; i < w.size(); ++i ) {
points.push_back(Point(size_v, w[i].begin(), w[i].end()));
}
std::cout << points.size() << std::endl;
std::cout << points[1].dimension() << std::endl;
std::cout << points[1][1] << std::endl;
return 0;
}