c++ - 结构与 vector 作为数据持有者

标签 c++ vector struct

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

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

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

或用 vector

double double Interpolation::evaluate(double t, std::vector<double> coeffs);

这个函数可能会被调用数百万次,所以我想保持它的效率。我想每次我们想调用它时都必须实例化一个结构,效率较低(根据我的阅读,结构只是一种特殊的类),但我找不到任何文档来证实这一点。

能不能有人对 c++ 有很好的理解,就实例化结构与 vector 的效率(与将超过 8 个参数传递给函数相比)向我提出建议

谢谢

最佳答案

结构看起来是个好主意。它减轻了将每个元素传递给函数的负担。

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

或者,您可以在 I'd you 周围传递一个 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
});

关于c++ - 结构与 vector 作为数据持有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36747408/

相关文章:

C++ 移入容器

go - 了解结构嵌入

c++ - 在另一个结构中使用对结构的引用时Arduino编译错误

c++ - std::ifstream::in 和 std::ios::in 有什么区别? (显然作为 C++ 中 std::ifstream 的开放模式标志)

c++ - 将 WRL 用于 C++/CX 函数 - 链接器错误

c++ - 如何设置QComboBox按钮的背景颜色?

c++ - 重复 vector 中的元素

C++ 用空格分割一个字符串,除非它被引号括起来并存储在一个 vector 中

c++ - 这两个位运算符在做什么?

c++传递包含指针的const结构 - 如何移动值?