【发布时间】:2016-04-26 07:17:44
【问题描述】:
假设,我们有一个外部库,它可以对一个双精度浮点数数组进行非常快速的计算(大多数时候是多线程的)。为方便起见,我以面向对象的方式编写代码,以便获得一组对象。每个对象都有一个持有双精度值的属性。使用强大的外部库的天真方法是这样的:
double temp[N];
for i from 1 to N
temp[i] = objectArray[i].property;
end
但是,这需要时间和额外的内存来保存 temp 数组。有没有更好的方法来做到这一点?
这是一个普遍的问题,但我基本上想在 C++ 中解决这个问题。
【问题讨论】:
-
如果您的库在一个数组上执行算法并且仅一个数组,那么这是唯一的方法。如果您的库可以以其他方式执行它,那么我们需要更多地了解这个库。
-
我能想到几个选项: 1. 在你的 objectArray 旁边放一个 double[] 成员,并确保它们始终同步。 2. 一个更好的选择是用指向 double[] 的 double* 替换您的 double 属性。这样你就不用写同步代码了
-
不知道库
API很难提出建议。这就是为什么STL接口风格如此强大的原因,他们将指针的概念概括为迭代器。如果你的库接受 iterators 这会容易得多。API有类似的东西吗? -
@Galik “如果你的库接受迭代器,这会容易得多。”怎么会更容易?你能简要解释一下吗?我是 C++ 新手。
-
@ZoltánCsáti 然后您可以将该算法与对象数组中的迭代器一起使用。这些迭代器将返回带有
operator*的双精度值。
标签: c++ performance numerical-computing