例如:
InitEmployee()
{
vector<Employee> employeeList = {
Employee("Clark Kent",0),
Employee("Bruce Wayne",1),
...
Employee("Hal Jordan",65535)
}
}
我无法从文件或数据库中查询,因为该程序需要位于单个可执行文件中,因此必须对所有常量数据进行硬编码。我实际上使用 boost 的 multi_index_container 按名称和 id 进行快速查找,但为了简单起见,我在这里使用向量作为示例。问题是我不能在没有堆栈溢出的情况下在单个函数中拥有那么多 (2^16) 常量数据。有没有更好的方法来初始化这个列表而不拆分函数?
我正在使用VC12。谢谢!
更新
查看选择的答案。正如其他人提到的那样,使用静态将迫使它继续数据而不是堆栈。这就是我最终的结果:
InitEmployee()
{
static Employee employeeList[] = {
{"Clark Kent",0},
{"Bruce Wayne",1},
...
{"Hal Jordan",65535}
}
vector<Employee*> employeeVec;
int count = sizeof(employeeList) / sizeof(Employee);
for (int i = 0; i < count; i++)
{
employeeVec.emplace(&employeeList[i]);
}
}
问题是 Employee 类使用了一个字符串类而不是 c-string,所以我不想在内存中复制它的两个副本。这样我最终得到的只是指针的额外内存,这仍然很多,但我相信这是最好的选择!也适用于 multi_index_container!谢谢