[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 03/13 21:05 / Filesize : 260 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 3



1 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:07:56 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/

577 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:33:47 ]
そのスレッドに渡すlpxでミューテックスと一緒に共有したいデータを渡すとか。

struct thread_data {
HANDLE hM;
int nCnt;
};
unsigned __stdcall thread0(void *lpx)
{
struct thread_data *data = lpx;
 /*排他制御にミューテックスを使っています*/
 HANDLE hM;
 hM = data->hM;

while ( 100 > data->nCnt )
以下略

578 名前:573 mailto:sage [2007/10/27(土) 03:03:46 ]
>>576
なるほど。文字どおりの処理をしていたのね。ごめん。

まず、そのプログラムには重大な問題がありそう。

それはともかく、
スレッド毎にメッセージ・キューを持たせて、相互にメッセージを送り合う
ということだと、まず、最初の選択として、
Windowsが提供してくれるメッセージ・キューを使うのか、
それ以外のメッセージ・キューを使うのか、
というのがあるが、とりあえず前者の方向で。

Win32APIのPostThreadMessageを使う。
まずは、MSDNライブラリ等でPostThreadMessageの解説を見よう。

579 名前:デフォルトの名無しさん [2007/10/27(土) 03:04:25 ]
>>577
ご助言ありがとうございます。
ただ、私が今回試してみたいのはスレッド間通信?というものになりそうなんですが、
このコードがそういった処理になるのでしょうか。
サンプルコードが分かり辛いと思うので、自信がありません…。

580 名前:デフォルトの名無しさん [2007/10/27(土) 03:07:12 ]
>>578
ありがとうございます。
エラー処理や組み方自体についても、学ぶべきことが多いですorz

PostThreadMessageについて、早速見てみます。

581 名前:573 mailto:sage [2007/10/27(土) 03:14:26 ]
ついでに>>576のプログラムの問題点と解決方法を。

まず、コンパイラの最適化の問題。
変数nCntの宣言にvolatileを付けていますか? 付けていなければ、付けること。

次に、100 > nCnt の比較が、排他制御の外にあること。
nCntに触っていいのは、排他制御の内側だけ。


582 名前:デフォルトの名無しさん [2007/10/27(土) 03:28:55 ]
>>581
たしかにこれでは…色々と参考になりました。

MSDNライブラリで調べたところ、
PostThreadMessage関数でデータをポストして、
GetMessage関数でポストされたデータを取得することで、
スレッド間でデータをやりとりできそうなので、早速試してみます。

ご助言いただいた方々、本当に有難うございましたm(_ _)m

583 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:47:47 ]
>>545です。
>>554
のA()で、

A::A()
{
  int j=0;
  for(int i=0; i<10; ++i){
    v.push_back(VEC(j));
    j+=10;
  }
}

としているのですが、ここで作られるVEC型オブジェクトは、
局所的なもので、寿命はfor 1回分の間だけですよね?
コンストラクタが呼ばれた直後にデストラクタが呼ばれるので、

vector<VEC*> v;
と宣言を直して、
A()では、
v.push_back(new VEC(j));
としなければダメですか?

何度も申し訳ないです。

584 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:55:04 ]
VEC(j)のコピーがvector内に追加される

585 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:59:02 ]
> コンストラクタが呼ばれた直後にデストラクタが呼ばれるので、
ただし、Aのvector<VEC> v;は、v.push_backの内部で、
引数を使ったコピーコンストラクタを使い、勝手に保持する。

vector<string> v;でv.push_back("ababa");と渡しても、
const char *pを受け取って内部で string(p) のようにして保持する。

> vector<VEC*> v;
> v.push_back(new VEC(j));

のようなことをするのなら、Aのデストラクタで、
push_backの所でnewしたぶんをdeleteしてやる必要がでてくる。





586 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:59:51 ]
かぶったorz

587 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:34:43 ]
>>583
基本ができてなさすぎ。
ちゃんと勉強して出直せ。

588 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:26:59 ]
>>583
いろいろごっちゃになっているようだが、
・関数内で宣言されたオブジェクトは関数が終わったら破棄される
と言われて、
関数が終わったらvectorの中身が壊れるのでは、と疑問を持ったみたいだけど、
この場合は関数へ渡す引数として宣言した「一時オブジェクト」なので問題ない。
そうでなくても、vectorは要素を「コピー」して保持するので、
元のオブジェクトが破棄されても何ら問題はない。

589 名前:588 mailto:sage [2007/10/27(土) 20:31:56 ]
間違えた、俺がごっちゃになってるorz
書き直すと、

関数内で作ったオブジェクトをvectorに入れたら、
関数を抜けた時にそのオブジェクトが破棄されてvectorの要素が無効になるのでは、と疑問を持ったみたいだけど、
この場合はvectorへ渡す要素として宣言した「一時オブジェクト」なので問題ない。
そうでなくても、vectorは要素を「コピー」して保持するので、
元のオブジェクトが破棄されても何ら問題はない。

590 名前:588 mailto:sage [2007/10/27(土) 20:34:03 ]
ああ、いや、一時オブジェクトは関係ないか、結局破棄されるんだから

とにかくvectorはコピーコンストラクタ呼び出してコピーしてるので、
元のオブジェクト破棄しても問題ない

591 名前:588 mailto:sage [2007/10/27(土) 20:42:08 ]



592 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:47:52 ]
ややこしく考え杉。

int g_c ;

void funcA(int& a) {
int b = a ;
g_c = a ;
}

void testA(void) {
int x = 3 ;
funcA(x) ;
}

これと同じよ

593 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 21:33:41 ]
フフフフフフハハハハハハ

594 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:07:18 ]
int ary[2] = { 1000 , 2000 };
int *po;

po = &ary[0];
printf("po\t = %x\n" , po);
printf("*po++\t = %d\n" , *po);
po++;
printf("po++\t = %x\n" , po);
printf("*po++\t = %d\n" , *po);
*po++;
printf("po++\t = %x\n" , po);
printf("*po++\t = %d\n" , *po);

これで最後の方で*poに1を加えてるつもりなのですが、変な値になって
*po+=1だと大丈夫です

*poはポインタの中身だと今まで思ってたのですが、、、、なんでなのでしょうか

595 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:09:12 ]
(*po)++;

釣りなんだろうけど



596 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:21:37 ]
理由のところ、教えてくれませんか

なんで()つけないとダメなのか。
というか中身にアクセスするときは()つけた方がいいんでしょうか

597 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:28:44 ]
>>596
演算子の優先度

598 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 04:23:38 ]
*po++ は *(po++) という意味だから、だな

599 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 04:48:37 ]
俺は演算子の優先度の表を暗記するだけの頭脳がないので、
決して、
*po++ ;
なんてコードは書かない。
他人が書いたのを読まないといけないときは、優先度の表を見て確認する。

そもそも、後ろに++を付けるのは特別なときだけだし・・・。

600 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 13:39:19 ]
*++p

601 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 13:40:46 ]
++(*po);

602 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 20:56:27 ]
>>601
括弧イラネ

603 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:02:43 ]
優先順位覚えてないから付けといて

604 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:33:35 ]
左側に単項演算子二つで優先順位も糞もないだろ

605 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:52:24 ]
むしろ全ての演算子を単項演算子にすれば頭で思い浮かべたものをキャレットを一々前後させずに一気に書ける



606 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:55:25 ]
>>605
それって何て逆ポーランド記法?

607 名前:デフォルトの名無しさん [2007/10/28(日) 23:15:58 ]
★改行が多すぎと言われたので、何度かにわけます。

構造体Sのvectorがあって、SのメンバdoubleDataに関してfindをしようとしています。
(#include <algorithm>しています)

struct S{
string strA;
int intData;
double doubleData;
};

findを使っているところは、こんな感じです。
vector<S>::iterator it;
it = find(VecTest.begin(), VecTest.end(), 1.7);
cout << (*it).doubleData << endl;


608 名前:デフォルトの名無しさん [2007/10/28(日) 23:16:34 ]
★続き

Boland55で、以下のようなエラーが出ます。

エラー E2094 c:\Borland\Bcc55\include\algorith.cc 72: != 演算子が使われたがクラ
ス S では double 型のための定義が存在しない(関数 find<S *,double>(S *,S *,const
double &) )
警告 W8057 c:\Borland\Bcc55\include\algorith.cc 75: パラメータ 'last' は一度も使
用されない(関数 find<S *,double>(S *,S *,const double &) )
警告 W8057 c:\Borland\Bcc55\include\algorith.cc 75: パラメータ 'value' は一度も
使用されない(関数 find<S *,double>(S *,S *,const double &) )
*** 1 errors in Compile ***


609 名前:デフォルトの名無しさん [2007/10/28(日) 23:17:24 ]
★続き

ちなみに、以下のような演算子オーバーロードをしているのですが、
何がよくないのでしょうか。
bool operator == ( const S& left, const S& right )
{
return left.doubleData == right.doubleData;
}

bool operator != ( const S& left, const S& right )
{
return left.doubleData != right.doubleData;
}



610 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:32:46 ]
find には 1.7 じゃなくて S を渡さんといかんのでは?

611 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:34:03 ]
struct has_double
{
bool operator()(const S& s, double d) const
{
return s.doubleData == d;
}
};

find_if(VecTest.begin(), VecTest.end(), has_double(1.7));

612 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:36:44 ]
まちがった

struct has_double
{
double d;

has_double(double d)
:d(d)
{}

bool operator()(const S& s) const
{
return s.doubleData == d;
}
};


613 名前:デフォルトの名無しさん [2007/10/28(日) 23:44:17 ]
>> 612さん

コンパイル、通りました!すごい!!
でも全く解読できましぇん。
一語一句の意味をこれから勉強します。。。


614 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:55:56 ]
>>612
テンプレート使って、

template<double value>
struct has_double
{
bool operator()(const S& s) const
{
return s.doubleData == value;
}
};

find_if(VecTest.begin(), VecTest.end(), has_double<1.7>);

ってのではダメ?

615 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:00:45 ]
はは
定数だからね



616 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:13:48 ]
もっと簡潔・明瞭に書く方法ないのかなぁ。


617 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 09:53:08 ]
C++勉強しはじめてリファレンスを知って、
ポインタ使うよりずっといいじゃないですかって気分なんですが、
関数の引数としてリファレンス使うときに、

void hoge(int* out1, int* out2); //out2の出力が必要ない場合はout2としてNULLを渡す

のような仕様はリファレンスでは実現できないってことなんでしょうか?
毎回ダミー変数宣言して渡すのも馬鹿らしいし。

618 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 12:44:05 ]
>>617
どうしてもやりたかったらこういう手はどうだろう。
--
int dummyOut;

void hoge(int & out1, int & out2 = dummyOut)
{
if (& out2 != & dummyOut) {
out2 = someOutput;
}
}
--
ダミーは必要だけど、毎回じゃないし使わないときは出力処理を回避することもできる。

619 名前:かぜひいてます←寝てろ mailto:sage [2007/10/29(月) 13:39:10 ]
>>617
ダミー変数を渡すのがバカらしいのなら、ポインタ渡しのままでいいのでは?

参照は、結局ポインタ渡ししてるだけだから、組み込み型を渡すときはあまりメリットがない。
しかも、ポインタ渡しでも上手に組めば代入するのは1、2ヶ所だから読みにくくも無い。

俺のスタイルとしては、値を返すときは参照型ではなくポインタ渡し。

参照型が活きるのはクラス等を渡すとき。
void hoge(vector<char>& ref_v);
void hoge(const vector<char>& ref_v);

メンバアクセス演算子( . -> )がオーバーライドされてる場合でも深く考えなくともよい。


620 名前:619 mailto:sage [2007/10/29(月) 13:44:56 ]
>>618
それも一応考えてみた。他にもオーバロードって手もあるよね。

621 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:30:48 ]
int val = 100;
val = val++;
int result = val;

このとき、result はいくつになりますか?
また、処理系に依存せず、同じ値になりますか?

622 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:44:58 ]
>>621
www.kouno.jp/home/c_faq/c3.html#3

623 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:47:49 ]
>>622
おぉ。ファック。
なんてこった。
ありがとう。

624 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:57:30 ]
ファックしてもいい?

625 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 00:59:37 ]
>>572
超遅レスで申し訳ない。

VB自体は糞というわけではないのか。。

もし、また改めて勉強するとするならば、VisualC++とVisualC#はどちらがお勧めですか?
もちろんどんな物を作るか、目的は何か、ってのが決まっててこそ選ぶのかもしれないけど、
もし、将来性等考えたらどっちになります??




626 名前:デフォルトの名無しさん [2007/10/30(火) 01:01:04 ]
VisualC#

627 名前:625 mailto:sage [2007/10/30(火) 01:06:12 ]
検索したらいっぱい出てきたんでとりあえず色々眺めて決めます。


・・とおもったらレスがついてた。
>626
なぜですか?よかったら教えてほしいです。

628 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:26:32 ]
自動車に例えるなら、

C# → トヨタ自動車本社の設計技術者
C++ → トヨタに部品を収めている協力会社の設計技術者

そういう感じ。

629 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:41:21 ]
…え。

630 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 06:09:37 ]
C# → Windowsユーザー
C++ → マイクロソフト

631 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:29:36 ]
>>628
確かに C++ の方がスキルが必要だから間違ってないね。

632 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:36:13 ]
.NET Frameworkって「のり」があるからC#, C++, F#とどれも使えるのが一番だね
状況に応じてシームレスに言語を選択できる開発環境ってのはかなり美味しいだろう
さらにPowerShellスクリプトも使えば窓も*nix系に匹敵するかなり強力な環境になると思う

633 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:24:06 ]
んじゃ、
C→町工場の工員
こんなかんじか?

634 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:09:12 ]
C→拡張しすぎてわけがわからなくなった、おじいちゃん技術者


635 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:43:19 ]
質問させてくださいー・・・。

Visualstudio2005のC++でCのソースをコンパイルしているんですけど、
off_t strip_offset, data_offset, curve_offset;
off_t thumb_offset, meta_offset, profile_offset;
の2行で構文エラーって出るんです。

error C2061: 構文エラー : 識別子 'strip_offset'
error C2061: 構文エラー : 識別子 'thumb_offset'

ココだけ見てもわかんねーよって感じでしょうか・・・。
なんとなく原因が雰囲気でも分かれば教えてください。




636 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:47:08 ]
>>635
off_tのtypedefを探して貼れ

637 名前:635 mailto:sage [2007/10/30(火) 16:11:04 ]
レスありがとうございます。

typedef、存在しないみたいです。
設定しなきゃ駄目ですか?

638 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:14:16 ]
typedefが存在しないわけがなかろう。
off_tは予約語じゃないぞ。

639 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:16:33 ]
それか、struct off_t strip_offsetとして使うべきものかも。

640 名前:635 mailto:sage [2007/10/30(火) 16:21:06 ]
>638
off_t、ココにしか出てこない上にtypedefってのも無いんです。
元々Linux用(?)に書かれたソースらしいんですけど、そっちではちゃんと動いているみたいなんですけど・・・。
すみません、いまいちよく分かってなくて。とにかくtypedefしなきゃ駄目って事でしょうか。

>639
struct off_t strip_offsetみたいにしてみたんですけど、、エラーが出ちゃいますね・・・。
「error C2079: 'strip_offset' が 未定義の struct 'off_t' で使用しています。」
だそうです。

641 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:26:44 ]
>>640
じゃあそのソースがインクルードしているソースやヘッダを
全部調べてoff_tの定義を調べるべきだな。

642 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:28:04 ]
もしかしたらtypedefではなく#defineかもしれない。

643 名前:635 mailto:sage [2007/10/30(火) 16:33:32 ]
>614
インクルードされているファイルって言うと#include <winsock2.h>みたいなやつですよね?
全部調べていくのはちょっと自分には難しいかもしれません。

そっちに原因があるということだったら、コンパイラを変えてみると何とかなるかも、ですか?
MinGWとかでコンパイルできるか試してみます!

>642
#defineもありませんでした。>635に書いた2行以外のどこにも出てこないんです。


644 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:34:14 ]
#include <sys/types.h>

645 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:38:35 ]
>>643
off_tでぐぐるぐらいの事はしてみたよな?



646 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:38:56 ]
typedef long off_t;

647 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:40:53 ]
>>635
検索を使ってちゃんと探してみたか?
俺は自分の環境で探してみつかったぞ。
しかも難しい定義でもなんでもなかったぞ。
答えは言わない。自分で環境全部きちんと探して。


648 名前:647 mailto:sage [2007/10/30(火) 16:45:36 ]
答えでちゃったね。
VS C++のファイル検索使えば全検索でも何分もかからないのに。
いずれ仕事にするならそれぐらいはきちんと覚えておいて。

649 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 17:01:56 ]
>644
その記述を入れたらoff_tに関してのエラーは出なくなりました!ありがとうございます。

>645
ググって、検索結果のページも色々参照させてもらったんですけど、なにぶんCそのものについての知識がなさ過ぎて・・・。すみません。

>646
その記述を入れてもoff_tに関してのエラーは出なくなりました!ありがとうございます。

>647
ありがとうございます。皆さんに助けていただいてひとつ前に進めました。
まだエラーが出てるんで先は長そうでけど・・・。

650 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 20:50:14 ]
理解しないで使うには危険な言語だと思うぞ。


651 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 12:14:47 ]
>>649
「その記述を入れたら出なくなった」じゃなくて、
なんでエラーが解消できたのかを知っておかないと
これから先苦労するぞ。

652 名前:デフォルトの名無しさん [2007/10/31(水) 18:09:26 ]
Win32環境+VS2005で開発を行っています。
ダブルクリックでファイルを開く処理に対応させようと頑張っていた所
Debugビルドでは成功したのですが、Releaseビルドにするとファイルを開かなくなりました。
(でもショートカットに開きたいファイル名を指定するとReleaseビルドでもきちんと開く)

そこで処理を追っていくと、どうもInitInstanceメソッドが呼び出されていないようなのですが、似たような経験をされた方はいらっしゃらないでしょうか?


653 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 18:11:41 ]
スレ違い

654 名前:652 [2007/10/31(水) 18:27:32 ]
了解しました、他スレに流れてきます。

655 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 18:59:54 ]
グリッド状に3次元ボクセルが並んでいる座標を格納したファイルがあって
0 0 0
1 0 3
5 20 9
…(順番はメチャクチャ)

ttp://up2.viploader.net/upphp/src/vlphp083780.jpg

こういう感じに1層だけ取り出して計算処理。
終わったらその上の層だけ取り出して計算処理

ということをしたいのですが

これって

for(slice=0,slice<MAX;slice++){
while(fscanf(fp,"%d%d%d\n",x,y,z)!=EOF){
array[x][y][z]に層を格納
}
格納した層について計算処理
}

という風に、計算したい層を取り出すために、毎回ファイルを読み込むという賢くない処理をしなくてはならんでしょうか
もう少し賢いやり方をしたいのですが、アドバイスいただけませんか。



656 名前:デフォルトの名無しさん [2007/10/31(水) 19:28:37 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5186.txt

これに実験結果を入れたいのですが、どこに入れたらいいか分かりません。
教えてください。

657 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 19:30:04 ]
>>656
コンパイルして、./a.out 実験結果 とでもすればいいだろ。

658 名前:wolf ◆8VH3XAqjlU mailto:sage [2007/10/31(水) 21:09:30 ]
>>655
For your Reference.

Managing Memory-Mapped Files in Win32
msdn2.microsoft.com/en-us/library/ms810613.aspx

Beej's Guide to Unix Interprocess Communication(Ref. Memory Mapped Files)
www.ecst.csuchico.edu/~beej/guide/ipc/

659 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:47:11 ]
>>658
thanks for your advice

but I don't mention accessing memory
and that code was rough. so I have some mistake



660 名前:デフォルトの名無しさん [2007/11/01(木) 01:31:10 ]
「派生クラスのインスタンスを生成する時、newで生成しないと使えない」
と言われたのですが、何でなのかわかりません。

  親クラス* p= new 子クラス;
  p->なんか関数();

これしか方法はないんですか?

661 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 01:39:13 ]
>>660
そんな事はない

662 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 05:49:28 ]
>>655
データ量にもよるが・・・

ファイルの読み書きと計算処理を分離し、
データはすべてメモリに読んでしまい、
計算処理はメモリ上にあるデータに対して行う。
いくつもの計算処理を済ませた後に、
メモリからファイルに書きだす。

663 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:38:55 ]
子クラス kokurasu;
親クラス* oyakuasu = &kokurasu;
oyakurasu->NFunction();

664 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 16:13:54 ]
>>662さん
レスありがとうございます。
小さいデータ量なら3次元配列に読み込んでしまえばいいのですが
量がメモリの容量を越えてしまうくらい大きいので…

2048×2048×2048の大規模なものや、それ以上を想定しています。。。

メモリに乗り切らない→1層ずつ処理→そのためには?
という考えからきています

665 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 16:34:53 ]
ファイルを何度もスキャンするくらいなら、
物理メモリに乗らないような巨大なサイズでも、
仮想記憶を使ってメモリ上に読んでしまったほうがマシかもよ。





666 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:00:46 ]
>仮想記憶を使ってメモリ上に読んでしまったほうがマシかもよ。
仮想記憶で扱うということはこれまでやったことが無くて。
どこかわかりやすく参考になるところありますか?

667 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:02:15 ]
>>666
ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6

668 名前:デフォルトの名無しさん [2007/11/01(木) 17:15:27 ]
教えてください。

(Aが1)、かつ(Bが2)以外に処理を実行するっていう場合どう記述したらいいんですか?


if((A==1)&&(B==2)){

}
else{
  処理
}

でいいのかなぁ?



669 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:17:15 ]
ありがとうございます。
だいぶ難しそうな気配がしています。。。


670 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:19:27 ]
if( (A!=1)&&(B!=1) )
処理

でいんでない

671 名前:よろず [2007/11/01(木) 17:21:39 ]
募集してるよん♪
bloom@geocities.co.jp

672 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:22:21 ]
if((A!=1)||(B!=2))
{
処理
}

673 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:22:36 ]
よくねぇよ

674 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:23:05 ]
>>668
ド・モルガンの法則でひっくり返せ。

A != 1 || B != 2

675 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:23:24 ]
>>668
if( !(A==1 && B==2) ) {
 処理
}



676 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:23:40 ]
更新してなかtったorz

677 名前:デフォルトの名無しさん [2007/11/01(木) 17:23:51 ]
ありがとう || でやってみます






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<260KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef