【发布时间】:2012-08-28 21:14:30
【问题描述】:
我试图通过在编译时计算数字序列并将它们存储为静态向量来节省计算时间(但我现在可能会在运行时开始计算一次)。我正在尝试做的一个简单(非编译)示例是:
#include <vector>
using namespace std;
static vector<vector<int> > STATIC_THING(4, vector<int>(4));
void Generator(int x, int y, vector<int> *output) {
// Heavy computing goes here
for(int i=0; i < 4; ++i)
(*output)[i] = x * y;
return;
}
static void FillThings() {
for(int x=0; x < 4; ++x)
for(int y=0; y < 4; ++y)
Generator(x, y, &STATIC_THING[x]);
}
FillThings();
int main() {
}
除了将我的序列预计算和硬编码到数组中之外,还有其他方法可以让编译器解决这个问题吗?我觉得应该有一种方法至少可以在头文件的第一个#include 上完成这项工作,但我只看到它与类一起完成。如果它有助于在编译时进行计算,我可以使用数组而不是向量。
编辑:
虽然有人建议使用模板元编程,但我的实际生成器算法过于复杂,不适合这种技术。
使用查找表似乎是我唯一可以避免运行时计算的其他选择;如果将来性能仍然是一个问题,我会依靠这个。
【问题讨论】:
-
为什么不直接使用构造函数呢?而不是
STATIC_THINK,使用一个包含向量的对象。如果需要,您可以将其设为单例。 -
我已经在传递中完成了该操作,在构造函数中创建了具有数据成员和初始化程序的类,其中我创建了一个静态实例。我可以走那条路,但我更感兴趣的是弄清楚为什么我不能像上面那样完成这项工作,如果没有其他原因,就是为了学习新东西。
标签: c++ performance static