C++ 作为数据持有者的结构与向量

C++ 作为数据持有者的结构与向量,c++,vector,struct,C++,Vector,Struct,我有一个私有函数,将用于某种插值(其实并不重要) 我需要把所有的系数传递给它。签名如下: double Interpolation::evaluate(double t, double a1, double b1, double c1, double d1, double a2, double b2, double c2, double d2); 所以这可能是争论。 现在,我可以用不同的方式存储所有这些参数,以提高可读性。我在考虑一个结构 struct Coeffs { double

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

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

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);
或者用向量

double double Interpolation::evaluate(double t, std::vector<double> coeffs);
double-double插值::evaluate(双t,std::向量系数);
这个函数可能会被调用数百万次,所以我希望保持它的效率。我认为每次调用结构时都必须实例化它的效率较低(根据我所读的,结构只是一种特殊的类),但我找不到任何文档来证实这一点

可以有良好的C++理解的人告诉我关于实例化结构与向量的效率(VS将超过8个ARG传递给函数)


谢谢

这个结构似乎是个好主意。它降低了将每个元素传递给函数的负担

我不建议传递一个
std::vector
,因为它引入了动态内存,并且不需要动态数量的参数

或者,您可以将一个
std::array
传递给我,告诉您它有一个数组

double interpolate(double t, std::array<double, 8>&& coeffs);

无论如何,通过引用是的,通过引用,双插值::评估(双t,系数和c);如果调用百万次,考虑函数的内联是这些系数的常数吗?Coeffs似乎是个好主意。向量将引入所有类型的运行时错误,这些错误不会在结构中发生。通常,您应该对密切相关且属于单个实体的数据使用结构(或类)。和一个向量(或数组),用于相同类型的不相关值的集合。从这个角度出发,在度量代码并找出瓶颈真正是什么(以及在哪里)之后,寻找优化。不要落入过早优化的陷阱。
interpolate (4.5, {
    1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1
});