C++相談室 part69at TECH
C++相談室 part69 - 暇つぶし2ch924:デフォルトの名無しさん
09/06/12 04:13:30
unique_ptrがoperator=でdeep copyしてくれればいいのに。

925:デフォルトの名無しさん
09/06/12 06:54:12
当然じゃねーの?てな部分に疑問を呈す >>922 の様な人が声高に暴れて言語やライブラリのカオス度が濃くなるんだよな
科学技術とか未踏の分野の開拓なら役に立つかもしれんけど邪魔な存在だな

926:デフォルトの名無しさん
09/06/12 07:35:04
しかしpimpl_ptrは何回もrejectされている…

927:デフォルトの名無しさん
09/06/12 08:26:46
pimpl自体、きもいイディオムだから、あんなの使わなくて済むようななにかを追加して欲しい

928:デフォルトの名無しさん
09/06/12 08:27:37
何の話をしているのかいまいちわからないが
ポインタ型があったとして

A a, b;
A *pa=&a, *pb=&b;
pa = pb;

こうしたら、aがbの値に上書きされるってこと?
なんだがおかしいね。
*pa = *pb; だよね普通。


929:デフォルトの名無しさん
09/06/12 09:52:42
個人的にpimplを使うようなでかいクラスは大体コンストラクタとかも
全部ソースで定義するのでscoped_ptrで問題なし

930:デフォルトの名無しさん
09/06/12 10:44:45
ちょいとしつもんだんですが、

30,000x30,0000x4程度のbool配列と、30,000x30,0000のint配列を使いたいという思いでいっぱいです。

しかし単純に配列を作ってしまうと、やはりout of memoryです。

どうにかして要素数を減らすのが一番だとは思うんですが、

一般的に、このように膨大な要素の配列を扱わざるをえない場合にはどのような方法を用いるのでしょうか?


931:デフォルトの名無しさん
09/06/12 10:49:51
>>930
疎なデータならその部分だけを保持する

932:デフォルトの名無しさん
09/06/12 10:51:08
>>930
速度が滅茶苦茶遅くていいならファイルをメモリと見なし
operator[]をオーバーロードするとか

933:デフォルトの名無しさん
09/06/12 11:09:18
>ちょいとしつもんだんですが、

質問団?w
そのくらいの量なら、64bitOSで普通にnewでもvectorでも持てると思うけど。
まぁ、swapされるのは覚悟する必要があるな。
処で、それ本当に必要なの? 疎行列として扱うとか、boolではなくcharかbitで保持するとかできない?

934:デフォルトの名無しさん
09/06/12 11:29:57
>>933
>64bitOSで普通に
さらっと、OSレベルで条件付け加えんなw
アフォか

935:デフォルトの名無しさん
09/06/12 11:32:54
>>934
2バイト整数を3万掛ける3万なら、32bitOSでも普通にOK。
今時、Windowsでも2GB位積んでるのが当たり前だしね。

936:デフォルトの名無しさん
09/06/12 11:38:47
> 30,000x30,0000x4程度のbool配列と、30,000x30,0000のint配列を使いたいという思いでいっぱいです。

30,0000?


937:デフォルトの名無しさん
09/06/12 11:41:11
うお、それは気づかなかった。30万なのか?w

938:デフォルトの名無しさん
09/06/12 11:43:13
2G程度あっても無駄無駄無駄ーなのです

939:デフォルトの名無しさん
09/06/12 11:58:11
ごめんなさい!3万x3万です!ちなみに768MBしか積んでません><クズです!
>>931-933
0or1のフラグとして使うつもりでboolを使いました。

やろうと思っていることは、「生物学で使うDNA塩基配列のアライメント」で
int 3マンx3マンを隅から数値を埋めていく一方で、
その数値を確認しながら条件に従って、その要素に対応するboolの配列の要素1-3に1or0を入れていく。

ということを行っています。

intの配列array[i][j]については[i+1][j+1]まで処理した時点で破棄できるのでもっと少なくできると思うんですが、

bool配列についてはすべて埋め終わった後に、もう一度フラグの確認をしていくのですべて残しておく必要があります。


ちなみにbool型が一番サイズが小さいと勝手に思い込んでいました。

940:デフォルトの名無しさん
09/06/12 12:05:43
なんだか良くわからないけど,計算用の鯖用意すれば解決するんじゃないかな^^;
パソコンでやるなら>>933とか.

でも
> int 3マンx3マンを隅から数値を埋めていく一方で、 
> その数値を確認しながら条件に従って、その要素に対応するboolの配列の要素1-3に1or0を入れていく。
これって注意深く行うとすると,今状態[3万×3万]と次状態[3万×3万]が必要になるんじゃないかい?
軽くめんどくさい

941:デフォルトの名無しさん
09/06/12 12:26:39
int配列やbit配列の要素間で、相互参照がないなら
ストレージに対して、逐次読み出し、逐次書き込みで
いいんじゃねーの。

942:デフォルトの名無しさん
09/06/12 12:31:29
塩基配列なら AGTC の4種
30kx30k 900M
1bit データなら 900M/8 = 112MB
塩基配列なら4種2bit 900M/4 = 225MB

メモリに載せるのは可能っぽい

943:デフォルトの名無しさん
09/06/12 12:35:52
>>939
768MBでも仮想記憶があるから屑だなんて言っちゃイヤ!

と言うのはさておいて。

>intの配列array[i][j]については[i+1][j+1]まで処理した時点で破棄できるのでもっと少なくできると思うんですが、
これは、相互参照があるってことなのかな?
だとしても、1行3万点として前後1行ずつで併せて3行がメモリにあれば事が足りるよね。
後は、ディスクをぶん回すことになるけどなんとかなりそうだ。
# 最初は1000x1000くらいに絞って作らないとデバッグの段階で死ねるね。

944:デフォルトの名無しさん
09/06/12 12:51:27
連続領域で取ることができないだけなので、int**にして3万を3万回動的確保すればいけるんじゃないの?


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch