2012-05-03 7 views
1

グリッド[50000] [50000]、私はベクターでしようとしたが、私はコードを実行すると、それは停止します。エラーはありません。お待ちください。ご提案はありますか?非常に概算として巨大なベクトルが "ハングする"プログラムですか? (50000 x 50000セル)

#include <iostream> 
#include <vector> 

using namespace std; 

typedef std::vector<int> IntVec; 
typedef std::vector<IntVec> IntGrid; 
IntGrid grid(50000, IntVec(50000)); 

int main(){ 
    grid[0][0]=3; 
    cout<<grid[0][0]<<endl; 
} 
+1

* * "私は、配列、グリッド[50000] [50000]を持つようにしたい" - なぜですか?これは実際の要件か、提案された実装に基づいて認識された要件ですか?それはあまりにも多くのメモリをつかむことです、より良いアプローチがあるかもしれませんが、解決しようとしている問題を教えてください。 –

+0

@EdS。あなたはここで見ることができます:http://stackoverflow.com/questions/10437622/how-to-implement-infinite-multidimensional-array/10438688#10438688私は少なくとも50kの入力にそのコードを使用したいと思います。 cac [50k] [50k]。 – vkx

+2

@ vk7x:物事が起こることはありません。あなたは疎な行列などを調べるべきです。リンク質問から –

答えて

3

50,000行× 50,000列× 4バイト/整数= 10,000,000,000 bytes

コンピュータがRAMの10 GB以上を持っていない限り、あなたはメモリが不足してきました。

あなたはデータの小さな塊で動作するようにプログラムを書き換えることができ、または即時アクセスを必要としない配列の一部を格納するファイルを使用しますか?

+0

あなたがここを見てでした:http://stackoverflow.com/questions/10437622/how-to-implement-無限多次元配列/ 10438688#10438688少なくとも50k入力にそのコードを使用したい。 cac [50k] [50k]。 – vkx

+1

あなたが達成しようとしていることを教えてください。たぶん、より効率的なソリューションを考え出すことができます。 –

+0

実際には、通常のx86-64 Linuxセットアップでは、スワップ領域を使用してそのような多くのメモリを割り当てることができるはずです。しかし、これはRAMに比べて非常に遅いです。 – leftaroundabout

関連する問題