gpt4 book ai didi

c++ - 使用函数调用初始化静态全局数据(在编译时)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:12 26 4
gpt4 key购买 nike

我试图通过在编译时计算数字序列并将它们存储为静态 vector 来节省计算时间(但我现在可能会满足于在运行时开始时计算一次)。我正在尝试做的一个简单(非编译)示例是:

#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 中完成此操作,但我只看到它是通过类完成的。如果在编译时有利于计算,我可以使用数组而不是 vector 。

编辑:

  • 虽然有人建议使用模板元编程,但我的实际生成器算法太复杂了,不适合这种技术。

  • 使用查找表似乎是我唯一可以避免运行时计算的其他选择;如果性能在未来仍然是一个问题,我将回到这个问题上。

最佳答案

这样做:

static int FillThings() {
for(int x=0; x < 4; ++x)
for(int y=0; y < 4; ++y)
Generator(x, y, &STATIC_THING[x]);
return 9087;
}
static int q = FillThings();

关于c++ - 使用函数调用初始化静态全局数据(在编译时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12145158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com