struct vs vector作为数据持有者
struct vs vector as data holder
我有一个私有函数,它将用于某种插值(实际上并不重要)。
我需要将所有系数传递给它。签名如下:
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
});
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 常量数据持有者类的c++模板
- struct vs vector作为数据持有者