2017-06-14 53 views
0

我試圖初始化1.000.001元素的數組,C++像這樣:int array[1000001]。我有4GB的內存,所以我猜想問題在於我的筆記本電腦不能容納這麼大的陣列,因爲它的尺寸是4 * 1000001 bytes。所以我決定試試char(只是因爲我想知道我的猜測是否正確)。我正在從文件讀取數組。這是我的代碼:從C++文件讀取的奇怪數組

#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}

現在我真的很困惑。這是爲什麼發生?

+3

你爲什麼要將整數讀入char數組? – NathanOliver

回答

4

在此語句

in >> array[i]; 

有使用其中模板參數charT代替模板類型參數char操作

template<class charT, class traits> 
basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT&); 

操作員從流中跳過空白字符讀取一個字符。

因此,作爲流包含的字符

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而不是數組。