给定以下代码:
vector<int> A[1000000];
for( int i = 0; i < 1000000; i++ ){
A[i].clear();
}
我在自动终端上运行它,该终端的测试用例与我的代码一起运行,因此我无法获得完整的调试消息。我没有收到任何错误,并且该程序似乎在单个测试用例中运行良好。然而,当我与完整的测试集比赛时,我会随机通过/失败测试用例(有一次我可能通过了前 3 个,另一个我通过了除它们之外的所有测试,另一个我只通过了第二个,等等)。我想确保这种初始化会摆脱数组上的“未定义”值(例如 char *buffer = new char[100]; buffer[0] = 0;
),以便它不是随机崩溃的原因。
sizeof(A) == 24000000
(~23MB),sizeof(int) == 4
。我只向这些 vector (总共)添加最多 100 万个整数,因此在最坏的测试中,每个 vector 可能是一个单元素 vector ,或者单个 vector 可能有 100 万个整数,而其余的仍然为空。
我必须调用析构函数吗?我假设不是因为我从来没有叫过新的,但我是 STL 的新手。最后,这可能不是我的代码的问题,而是测试人员的问题,但我仍然想确保这对我来说没问题。
最佳答案
我认为这是一个堆栈溢出,正如 M.M 所建议的那样。线路
std::vector<int> A[1000000];
在堆栈上创建一百万个 vector 对象,这太多了。在我的机器上,该示例对一百万个 vector 失败,但对一千个 vector 运行良好。
关于C++ Vector<int> 数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41561521/