将阵列传递到Boost Vector元组中
passing array into boost vector tuple
我使用Boost Lambda库找到了给定百万分的最接近点。当从文本中读取这些百万分时,它运行良好。但是,为了减少编译时间,我将这些数据存储在数组中,我正在尝试从数组中读取代码。尽管没有汇编错误,但是在元组的每个元素内存储的垃圾值的结果是错误的。代码是:
namespace
{
typedef double coord_t;
typedef boost::tuple<coord_t,coord_t,coord_t,coord_t,coord_t,coord_t> point_t;
使用Boost库计算距离:
coord_t distance_sq(const point_t& a, const point_t& b)
{
boost::geometry::distance
coord_t x = a.get<0>() - b.get<0>();
coord_t y = a.get<1>() - b.get<1>();
coord_t z = a.get<2>() - b.get<2>();
return x*x + y*y + z*z;
}
输入点,从百万个点可以找到最接近的点:
double px, py, pz;
px=4; py=4; pz=4;//-0.1958 0.8703 0.09787
point_t point(px, py, pz);
}
从文本文件中读取数据:
ifstream f("MiniRotorCraft_02.txt");
while(f)
{
coord_t xa,ya,za,ua,va,wa;
f >> xa >> ya >> za >> ua >> va >> wa;
points.push_back(boost::make_tuple(xa,ya,za,ua,va,wa));//Million points entry into boost tuple
}
当我这样做时,它运行良好。但是我希望我的代码不要从文本文件中读取,而是从代码本身中读取数组的读取。所以我写了:
for (unsigned int i = 0; i < B[llp].size(); i++)
{
xa[i]=get<0>(B[llp][i]);
ya[i]=get<1>(B[llp][i]);
za[i]=get<2>(B[llp][i]);
ua[i]=get<3>(B[llp][i]);
va[i]=get<4>(B[llp][i]);
wa[i]=get<5>(B[llp][i]);
}
for (unsigned int i = 0; i < B[llp].size(); i++)
{
coord_t xa[i],ya[i],za[i],ua[i],va[i],wa[i];
//Instead of taking the data from text file I am trying to take from array that are stored in the code.
points.push_back(boost::make_tuple(xa[i],ya[i],za[i],ua[i],va[i],wa[i]));
}
,但它不起作用。它正在返回一些任意的垃圾价值。 如何做呢。任何建议都将是非常有益的。
以下代码
for (unsigned int i = 0; i < B[llp].size(); i++)
{
coord_t xa[i],ya[i],za[i],ua[i],va[i],wa[i];
//Instead of taking the data from text file I am trying to take from array that are stored in the code.
points.push_back(boost::make_tuple(xa[i],ya[i],za[i],ua[i],va[i],wa[i]));
}
不是C 标准
coord_t xa[i],ya[i],za[i],ua[i],va[i],wa[i];
您正在宣布coord_t
的6个C风格阵列(又称double
)大小i
,其中i
是一个已知的已知值(循环中的索引)。
,但还有更多:如果编译器接受具有运行时值的C风格数组的初始化(有些人接受语言扩展),则它们不被初始化(因此具有未定义的值),并且在以下行中
points.push_back(boost::make_tuple(xa[i],ya[i],za[i],ua[i],va[i],wa[i]));
您正在传递初始化的C风格数组i
的索引i
(I 1-N值)的值。
结论:您的程序是不确定的行为,垃圾绝对可理解。
可疑:您确定要线
coord_t xa[i],ya[i],za[i],ua[i],va[i],wa[i];
并且您不希望在上面的for
-loop?
相关文章:
- C++:TypeDef使用元组
- Pybind11:将元组列表从Python传递到C++
- 重载元组索引运算符-C++
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将fold表达式与std::一起用于两个元组
- std::ranges::elements_view,用于自定义类似元组的数据
- 将元组的向量转换/构造为堆
- 专用于 std 元组的模板,而无需用户执行remove_cvref
- 将元组的向量构造成堆
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 类内部和外部静态 constexpr 元组之间的差异
- 可变参数模板与使用元组在参数中添加不同的数据对
- 将阵列传递到Boost Vector元组中
- 返回 vector<pair<int,int>> & from c++ 方法到 python 使用 swig typemap 的元组列表
- Boost::MPL Vector和For_Each:如何将Vector打印为元组
- 循环遍历类模板中的元组,插入vector元素
- 如何通过lambda使用自定义相等来查找在std::vector中具有一个匹配元素的元组
- 将std::string的std::vector解析为任意类型的std::元组