我不确定这是否是这个问题的地方,但现在就这样了。
我正在研究C ++中的计算物理模型,我收到了一个很重要的代码。
该领域是量子电子学,因此有很多积分和表达式,但我的问题涉及优化。
最初代码需要4个小时才能完成模拟,我在删除了几个瓶颈后整理了30分钟。
我仍然不喜欢的是代码中的数据(主要是double
类型的数组)混合std::vector<(double)>
,std::valarray<(double)>
和armadilo的arma::vec
。< / p>
哪一个是最好的方法,我是否应该尝试为数组制作统一的数据类型?
我认为之前博士生使用valarray
的原因是它的友好性,因为运营商*
,/
,+
,-
已经过载,而且有一些稀缺的在线承诺valarray
比传真更快(关于此的大型在线辩论)。
犰狳是由于它与MATLAB语法的相似性和极其完善的文档库而被引入,并且当T为class而不是double时保留std::vector<(T)>
。
我个人更喜欢犰狳,因为它具有非常简单的逻辑并且感觉很自然,valarray
有时会因为它们没有很多成员函数而烦恼我,但是通过它们进行迭代非常容易,向量非常烦人,算术运算符没有为<(double)>
重载,如果我选择了这些,我可能需要为double
的数组创建我自己的类,我真的不想这样做。
请记住,我不知道这些数组在内存中是如何表现的,去年我开始使用C ++,我还有很长的路要走。我计划再开发2个维度的代码(目前它是1D),执行时间肯定会增长。
我在那里寻求建议,我应该继续使用哪种数组类型,并且我应该使代码统一(强制所有double
数组的类型相同(std::valarray
,std::vector
或arma::vec
))