我有一个私有函数,它将用于某种插值(实际上并不重要)。
我需要将所有系数传递给它。签名如下:
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);
这个函数可能会被调用数百万次,所以我想保持它的有效性。我想,每次调用结构时都必须实例化它的效率会降低(根据我所读到的,结构只是一种特殊的类),但我找不到任何文档来证实这一点。
是否有人能很好地理解c++,就实例化结构与向量(与向函数传递8个以上的args)的效率向我提供建议
感谢
结构似乎是个好主意。它降低了将每个元素传递给函数的负担。
我不建议传递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
});