我试图在1.000.001
中初始化一个C++
元素数组,如下所示:int array[1000001]
。我有4GB的RAM,所以我猜测问题是我的笔记本电脑因为4 * 1000001 bytes
大小而无法容纳这么大的阵列。所以我决定试着把它char
(因为我想知道我的猜测是否正确)。我正在从一个文件中读取数组。这是我的代码:
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
int main()
{
fstream in("C:\\Users\\HP\\Documents\\Visual Studio 2017\\Projects\\inputFile.in");
if (!in)
{
cerr << "Can't open input file\n";
return 1;
}
fstream out("outputFile.out", fstream::out);
if (!out)
{
cerr << "Can't open output file\n";
return 1;
}
int n;
in >> n;
int i;
char array[100];
for (i = 0; i < n; i++)
in >> array[i];
in.close();
out.close();
}
输入:
5
45 5 4 3 12
我的数组是{4, 5, 5, 4, 3}
。
输入:
5
12 3 4 5 45
我的数组是{1, 2, 3, 4, 5}
现在我真的很困惑。为什么会这样?
答案 0 :(得分:4)
在本声明中
in >> array[i];
使用了运算符
template<class charT, class traits>
basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT&);
其中模板参数charT
替换模板类型参数char
。
操作员从流中跳过空格字符读取一个字符。
因为流包含以下字符序列
45 5 4 3 12
然后对于操作员的五次调用,将读取以下字符
4, 5, 5, 4, 3
将跳过空格字符。
您可以将流读取为具有整数,例如
for (i = 0; i < n; i++)
{
int value;
in >> value;
array[i] = value;
}
对于大整数数组的问题,当你应该声明它具有静态存储持续时间时,例如在任何函数之外声明它。或者您可以使用标准类std::vector
而不是数组。