【发布时间】:2015-04-04 06:39:36
【问题描述】:
以下代码在 ideone 上运行良好,输出为
10000
10000
如预期的那样
但是在我的本地机器上,输出是这样的
9990
9998
代码所做的只是创建一个包含 10k int 的向量并计算其中 0 的数量。一次使用类,一次在 main 中。
如果我以调试模式在本地运行代码,则会导致
0
0
我在 Windows 7 上使用带有默认 GNU GCC 编译器的 codeBlocks(虽然它编译 C++,所以我猜它与只编译 C 的 Linux GCC 不同)
#include<iostream>
#include<vector>
using namespace std;
class vecttest
{
vector<int> vect;
public:
vecttest()
{
vect.reserve(10000);
}
int zcount()
{
int count=0;
for(int i=0;i<10000;i++)
{
if(vect[i]==0)
count++;
}
return count;
}
};
int main()
{
vecttest v;
cout<<v.zcount();
vector<int> v2;
v2.reserve(10000);
int count=0;
for(int i=0;i<10000;i++)
{
if(v2[i]==0)
count++;
}
cout<<endl<<count;
}
ideone链接:http://ideone.com/q1XRvQ
【问题讨论】:
-
为什么你认为它应该默认为零?你只是在保留空间
-
@EdHeal 这就是stackoverflow.com/questions/5222404/…接受的答案中提到的行为
-
你应该使用
vect.resize(10000,0); -
@πάνταῥεῖ 谢谢,做到了..现在我看到储备没有初始化,调整大小
-
@Akash - 储备只是改变容量。调整大小会改变分配的数量
标签: c++