struct vs vector作为数据持有者

时间:2016-04-20 14:45:06

标签: c++ vector struct

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

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

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传递给函数)

由于

1 个答案:

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