C ++ Vector <int>数组初始化

时间:2017-01-10 05:09:20

标签: c++ arrays vector stl initialization

给出以下代码:

vector<int> A[1000000];
for( int i = 0; i < 1000000; i++ ){
    A[i].clear();
}

我在自动终端上运行它,测试用我的代码运行,所以我无法获得完整的调试消息。我没有收到任何错误,并且程序似乎在单个测试用例中运行良好。然而,当我对整个集合运行时,我通过/失败测试用例随机(有一次我可以通过前3个,另一个我传递除了它们之外的一切,另一个我只传递第二个,等等)。我想确保这种初始化能够摆脱&#34; undefined&#34;数组上的值(例如char *buffer = new char[100]; buffer[0] = 0;),这样就不会导致随机崩溃。

sizeof(A) == 24000000(~23MB),sizeof(int) == 4。我只向这些向量添加了100万个整数(总计),因此在最差的测试中,每个向量可以是一个元素向量,或者单个向量可以有100万个整数,而其余的仍然是空的。

我是否必须调用析构函数?我没想到因为我从未打电话给新人,但我是STL的新手。最后,我的代码可能不是问题,而是测试人员,但仍然希望确保这对我来说很好。

2 个答案:

答案 0 :(得分:6)

我认为这是一个堆栈溢出,正如M.M建议的那样。这条线

std::vector<int> A[1000000];

在堆栈上创建了一百万个矢量对象,这太过分了。在我的机器上,示例失败了一百万个向量,但它工作正常一千。

答案 1 :(得分:0)

代替代码下面的循环使用

std::fill(A.begin(), A.end(), 0);