我有一个私有函数,用于某种插值(并不重要)。
我需要将所有系数传递给它。签名如下:
double Interpolation::evaluate(double t, double a1, double b1, double c1, double d1, double a2, double b2, double c2, double d2);
所以那可能是争论。 现在,我可以以不同的方式存储所有这些args以获得更好的可读性。我在想一个结构
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);
或使用矢量
double double Interpolation::evaluate(double t, std::vector<double> coeffs);
这个功能可能被称为数百万次,所以我想保持它的效率。我想每次我们想要调用它时必须实例化一个结构效率较低(根据我读到的结构,结构只是一种特殊的类),但我找不到任何文档来证实这一点。 / p>
具有良好c ++理解能力的人能否告诉我实例化结构与向量的效率(vs将超过8个args传递给函数)
由于
答案 0 :(得分:2)
结构似乎是一个好主意。它降低了将每个元素传递给函数的负担。
我不建议在引入动态内存时传递std::vector
,并且您不需要动态数量的参数。
或者,您可以传递一个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
});