2015-11-27 25 views
-10

我想:我怎麼能代表一個數組[100000] [100000]在C++中只存儲0或1?

vector<int <vector> > Graph(100000, vector<int> (100000)) ; 

vector<bool<vector> >Graph (100000,vector<bool> (100000)) ; 

bool Graph [100000][100000] ; 

...但他們都不工作。

+4

不要爲C++問題添加C標籤! – Olaf

+4

你不覺得它有點大嗎? –

+6

這是非常具體的*,但它不工作*。你認爲我們可以猜出什麼是錯的?當你問一個問題時,爲什麼它不工作是必不可少的。因爲這也會反映出你對問題的理解程度,當你試圖做一些你還沒有做好準備的事時,情況可能就是這樣。 –

回答

2

創建矢量的矢量正確的方法是:

vector<vector <int> > Graph(100000, vector<int> (100000)); 

然而注意,該陣列將需要10^5 * 10^5 * 4 = 40個十億字節(假設你int是32位)或大約40 GB的RAM。你將不得不那麼多的記憶,當然。

+0

你指的是哪個特殊的標誌? – emlai

+1

我從來不需要任何特殊的標誌來分配(我已經使用了幾種不同的編譯器)。我甚至不需要那麼多的內存+交換來分配它。許多頁面在分配時會結束「需求零」,在您寫入非零值之前不會使用內存。 – JSF

+0

@JSF,天頂。唉,我不太記得。我知道幾個(也許是5年)我需要一個10 GB的矢量來解決我正在解決的一個競爭問題。編譯器(或連接器 - 我不記得)打印了一些錯誤,我只在添加了一些標誌後才修復它。我將刪除這個句子,因爲我沒有一個例子來支持它。 –

1

那麼這樣

int wMyArray[100000][100000]; 

會給你這個編譯時錯誤:error C2148: total size of array must not exceed 0x7fffffff bytes

然後用Vector做:

std::vector<std::vector<int>> wMyVector(100000, std::vector<int>(100000)); 

wMyVector.back().back(); 

只是需要永遠載入,你可以實際看到加載時增加的工作字節數量。

不知道你真的想這樣做。

相關問題