例如:
InitEmployee()
{
vector<Employee> employeeList = {
Employee("Clark Kent",0),
Employee("Bruce Wayne",1),
...
Employee("Hal Jordan",65535)
}
}
我无法从文件或数据库中查询,因为该程序需要在单个可执行文件中,因此所有常量数据都必须进行硬编码。我实际上使用 boost 的 multi_index_container 通过名称和 id 进行快速查找,但为了简单起见,我在这里使用 vector 作为示例。问题是我不能在没有堆栈溢出的情况下在单个函数中拥有那么多 (2^16) 常量数据。有没有更好的方法在不拆分函数的情况下初始化这个列表?
我正在使用 VC12。谢谢!
更新
查看所选答案。正如其他人提到的那样,使用 static 将迫使它继续处理数据而不是堆栈。这就是我最终得到的:
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 字符串,所以我不希望它在内存中有两个拷贝。这样我就得到了额外的指针内存,这仍然很多,但我相信这是最好的选择!也适用于 multi_index_container!谢谢
最佳答案
使用静态数组存储初始化数据。
InitEmployee()
{
static char const* const names[] = {
"Clark Kent",
"Bruce Wayne",
...
"Hal Jordan"
};
size_t const n = sizeof(names) / sizeof(*names);
vector<Employee> employeeList;
employeeList.reserve(n);
for (size_t i=0; i<n; ++i)
employeeList.emplace_back(names[i],i);
...
}
关于c++ - 将大量数据初始化到 C++ 容器中的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22796198/