当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C++Vector<int>数组初始化》经验,为你挑选了1个好方法。

给出以下代码:

vector 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.我只向这些向量添加了100万个整数(总计),因此在最差的测试中,每个向量可以是一个元素向量,或者单个向量可以有100万个整数,而其余的仍然是空的.

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



1> cthl..:

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

std::vector A[1000000];

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


23MB肯定**对于堆栈来说太大了,所以你必须在堆上分配.在这种情况下,我会尽量避免使用`new`.相反,你可以使用向量向量:`std :: vector > A(1000000);`.
推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有