我正在使用C ++对一些复杂的FFT算法进行编码,因此我需要实现诸如四元组和汉密尔顿 - 艾森斯坦代码之类的代数结构。算法与该结构的2D数组一起工作。将它们作为课程实施的开销是什么?换句话说,我应该用[m] [n]维数创建数组,该数组由季节类别组成,还是应该创建[m] [n] [4]数组并将[4]数组作为Quaternions工作?使用类更方便,但是创建M*n类并访问其方法而不是仅使用数组 - 这不是太多的开销吗?我正在编码大型图像处理算法,因此性能对我很重要。

有帮助吗?

解决方案

恕我直言,您可以通过将它们作为类实施,仅仅是因为这将使您更快地编写代码的错误。您应该进行测量,以查看如果对您很重要,则表现最佳,也要确保实际上是该代码是性能瓶颈。 (强制的 唐纳德·诺斯·奎特(Donald Knuth Quote): :“过早优化是所有邪恶的根源”)。

我想说,大多数编译器将在为您优化代码方面做得很好。我经常发现,除了这些低水平的事物外,还有其他不同的东西,例如添加早期测试或最小化数据集或其他内容。

对于四元组,您仍然可以在内部使用数组(实际上更快)实现类,这应该使差异变得不那么重要。

例如,可以确保您可以在多功能机上使用Parallell运行算法或进行实际计算使用SSE说明,从而更好地为您服务。

其他提示

关于课程的开销:除非您的课程具有虚拟功能,否则使用课程不会受到惩罚。

因此,例如,一系列复杂变量可以写为:

std::complex<double> m[10][10];

不过,请注意STL收集课程,因为它们倾向于使用动态分配,有时会引入重要的开销(即,我不会使用数组 vector< vector<> >.

您可能想调查库的使用,例如 特征 用于快速,优化的矩阵/矢量类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top