struct vs vector作为数据持有者



我有一个私有函数,它将用于某种插值(实际上并不重要)。

我需要将所有系数传递给它。签名如下:

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
});

最新更新