我有一个私有(private)函数,将用于某种插值(并不重要)。
我需要将所有系数传递给它。签名如下:
double Interpolation::evaluate(double t, double a1, double b1, double c1, double d1, double a2, double b2, double c2, double d2);
这就是可能的争论。 现在,我可以以不同的方式存储所有这些参数,以提高可读性。我在想一个结构
struct Coeffs
{
double a1;
double b1;
double c1;
double d1;
double a2;
double b2;
double c2;
double d2;
}
double Interpolation::evaluate(double t, Coeffs c);
或用 vector
double double Interpolation::evaluate(double t, std::vector<double> coeffs);
这个函数可能会被调用数百万次,所以我想保持它的效率。我想每次我们想调用它时都必须实例化一个结构,效率较低(根据我的阅读,结构只是一种特殊的类),但我找不到任何文档来证实这一点。
能不能有人对 c++ 有很好的理解,就实例化结构与 vector 的效率(与将超过 8 个参数传递给函数相比)向我提出建议
谢谢
最佳答案
结构看起来是个好主意。它减轻了将每个元素传递给函数的负担。
我不建议传递 std::vector
,因为它引入了动态内存,而且您不需要动态数量的参数。
或者,您可以在 I'd you 周围传递一个 std::array
,它有一个数组。
double interpolate(double t, std::array<double, 8>&& coeffs);
这样你甚至不需要复制元素,因为它需要一个临时变量作为参数。
数组和结构版本都可以这样调用:
interpolate (4.5, {
1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1
});
关于c++ - 结构与 vector 作为数据持有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36747408/