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