トップページ⇒tech
985コメント276KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2011/06/15(水) 11:47:04.75
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
16 http://hibari.2ch.net/test/read.cgi/tech/1279285647/
17 http://hibari.2ch.net/test/read.cgi/tech/1285115590/
18 http://hibari.2ch.net/test/read.cgi/tech/1291571263/
0002デフォルトの名無しさん2011/06/15(水) 19:46:56.63
      / ゙゙゙̄'''===―--、、、_   _,                _ -==''  ̄ ̄ ̄`ヽ
           ,-=―--、、,,,.―-  ̄ ̄        ヽ√ ̄ ̄ニ ̄-‐  _ィ-‐= 、
         彡'"  /o 三 `ヽ`ミ、ヽ              '´ ,.彡=''"" ̄    `゙ミ
            {  (⌒)  }  ヽ{              "  {  (⌒)  ,l
            丶、  ゙ ノ                     ヽ     ノ
              ー-- ' ,. 彡〃              、、 、_ー-- ´
          丶ミ=-='''"´                   ヽヽヽヽ ̄三=―彡
                            /         /  ハ   
        / / / / ハ / ヽ ヽ ヽ                     / ヽ  ヽ ヽ   
 


                         / ̄ ̄ \
0003デフォルトの名無しさん2011/06/15(水) 19:54:34.28
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリリッ
0004デフォルトの名無しさん2011/06/16(木) 13:47:58.33
C/C++って言語仕様ではマルチスレッドって非対応ですよね?
C/C++でのマルチスレッドプログラムのいい参考図書とかないですか?
0005デフォルトの名無しさん2011/06/17(金) 20:52:41.40
矢印キーが押されたかどうかを判定する関数を教えてください
0006デフォルトの名無しさん2011/06/17(金) 21:00:19.42
>>5
windowsならWM_KEYDOWNイベントを監視すれば
000752011/06/17(金) 21:05:15.33
>>6
回答ありがとうございました。
スレッドを移動するため>>5を撤回します。
0008デフォルトの名無しさん2011/06/18(土) 13:41:59.17
質問です。
lstrcmp()で文字列比較をしているのですが、稀に戻り値の値が間違った値になります。
具体的には、第1引数の文字列の方が辞書順で前にある場合は-1、後ろにある場合は+1が返るはずなのですが
ときどき、辞書順で前にあるはずなのに+1が返ったり辞書順で後ろにあるはずなのに-1が返ったりします。
ビルド環境はVisualStudio2005で動作環境はWindowsVista Buisiness SP2です。

VC6でビルド→WinXPで動作、VC2008でビルド→Win7で動作 の場合は
いずれも問題が起きていません。(確認した限りでは。)

lstrcmp()のかわりにCompareString()を使用しても同じ現象となります。
lstrcmp()、CompareString()ともおなじKernel32.libをインポートライブラリとして使用しているので
これが原因だったりしないかなーと思ったりしますが確証なしです。

なにか分かる方いませんでしょうか?
0009デフォルトの名無しさん2011/06/18(土) 15:19:35.11
strcmpでも同じ?lstrcmpは使ったこと無いが、
その異常が起こる場合のテストケースをうpすれば解決は早いだろう
0010デフォルトの名無しさん2011/06/18(土) 15:22:53.12
ひらがな比較してたりしないだろうな
001182011/06/18(土) 22:17:30.63
長文になってしまい分割します。
恐縮ですがお願いします。

>>9
strcmpは使ってないので分かりません。
_mbscmp()で試したところ問題は発生しませんでした。
ちなみにVisualStudioのプロジェクトのプロパティで文字セットは”マルチバイト文字セットを使用する”にしています。

001282011/06/18(土) 22:29:04.69

>>9
やってること(やりたいこと)は以下。
・文字列配列A と 文字列配列Bをconst指定で別々のヘッダファイルで定義。(文字列はすべて漢字、2文字から7文字、50種程度、内容はABで同一)
・ある構造体メンバに文字列配列Bの中の文字列bのアドレスをわたしておく
・構造体メンバの指している文字列bが文字列配列Aの何番目の文字列か知りたい。
・文字列配列Aの中の文字列bと同じ文字列を探索(辞書順にソートしてあり二分探索で探索)
 →この際にlstrcmp(文字列a,文字列b)というようにして比較。戻り値の正負により探索先を配列の小さい方or大きい方に決める)
・稀にlstrcmp()戻り値の正負が逆に判定される
 →このとき二分探索で最後まで探しても文字列が見つからずエラーとなる。
001382011/06/18(土) 22:29:57.85
>>9

※lstrcmpの引数の文字列を文字列と16進でファイルに出力してみたところ、文字列は壊れていない。
※しかし、lstrcmpの戻り値は稀に正負が逆になっている。
※特定の文字列で発生しているという事はなく、ランダムにおかしい結果となる。
※テストプログラムをループさせて試してみたが数万回〜数十万回 lstrcmp()を実施して1回おかしくなる程度
※関係あるかわからないが、テストプログラムを実行する際に他のプログラムを起動させたりするとそのタイミングで発生しやすい。
001482011/06/18(土) 22:34:15.41
>>10

恐らく全て漢字です。(もしかすると ひらがな もあるかも)
動作実績はあるので問題は無いはずと思っています。
0015デフォルトの名無しさん2011/06/18(土) 22:34:20.39
lstrcmp()単体で疑ってるのなら、
文字列A、文字列B、戻り値のセットでファイルにでも出力して、
何時間でも回してみるといいじゃない。
0016デフォルトの名無しさん2011/06/18(土) 23:13:07.25
質問です。

あるクラスのオブジェクトのメンバ関数をほかのオブジェクトのメンバ関数の中で呼び出したいときはどうすればよいでしょうか。
そのまま関数呼び出しをすると、コンパイル時に

error: no matching function for call to ‘クラス::メンバ関数(引数)’

というエラーメッセージが出てしまいます。
教えてください。
0017デフォルトの名無しさん2011/06/19(日) 00:04:02.41
クラスのメンバ関数宣言時に
static メンバ関数ってやればいいよ
001882011/06/19(日) 01:02:03.17
>>15
やってみました。
VistaSP2ではボロボロとlstrcmpと_mbscmpの結果が違う場合が発生しました。
何時間どころか一発で出ました。
どなたかWinXPやWin7でどうなるかやってみてもらえませんか?
++count;
for(int k=0; k<100000; k++){
 for(int i=0 ; i<11; i++){
   for(int j=0; j<11; j++){
     if((lstrcmp((LPSTR)cmp_dst[j], (LPCSTR)cmp_src[i])) != _mbscmp((const unsigned char *)cmp_dst[j], (const unsigned char *)cmp_src[i])){
0019デフォルトの名無しさん2011/06/19(日) 01:04:00.73
>>15
書き込めなかったので分割しました。
ヘタクソなやり方で恐縮ですが。

       wsprintf((LPSTR)str_buf, (LPCSTR)warning, cmp_dst[j], cmp_src[i]);
       TextOut(hdc, 0, 50+i*20, str_buf, strlen(str_buf));
     }
   }
 }
}
wsprintf((LPSTR)str_buf, count_msg, count);
TextOut(hdc, 0, 0, (LPCSTR)str_buf, strlen((const char *)str_buf));

0020デフォルトの名無しさん2011/06/19(日) 01:15:32.92
DirectShowのFilterGraphみたいなGUIを作りたいんですが、何か簡単な方法ないですか?
フォームアプリケーションだと難しそうで
0021デフォルトの名無しさん2011/06/19(日) 01:30:19.83
>>18
なーんか、TCHAR関係を理解してない気がする。そこはおk?

int lstrcmp(
LPCTSTR lpString1, // 最初の文字列
LPCTSTR lpString2 // 2 番目の文字列
);
int _mbscmp(
const unsigned char *string1,
const unsigned char *string2
);

TCHARを使うなら、_MBCSや_UNICODEが定義されているかどうかが決定的。
lstrcmpに渡すポインタを どうキャストして渡すか などで挙動は代わらない。

さらに、以下の「解説」の項目に興味深いこともかいてある。
http://msdn.microsoft.com/ja-jp/library/cc410902.aspx
0022デフォルトの名無しさん2011/06/19(日) 02:18:33.58
>>17
ありがとうございます。
0023デフォルトの名無しさん2011/06/19(日) 05:34:43.91
アルゴリズムの質問になっちゃうけど、ダイクストラってa→bとb→aへのコストが
違っても普通のダイクストラ法でちゃんと動く?
0024デフォルトの名無しさん2011/06/19(日) 17:41:10.53
3要素のchar *の配列の参照はどのように記述すればよいでしょう?
↓これをtypedefせずに一文で書きたい。

typedef char *arr[3];
arr& a;
0025デフォルトの名無しさん2011/06/19(日) 18:22:07.82
char *(&a)[3];
0026デフォルトの名無しさん2011/06/19(日) 19:43:04.67
ありがとう。えぐいですね。それを返す関数は、あーでもないこーでもないとやった結果
char *(&a())[3];
とさらにえぐかったです。
0027デフォルトの名無しさん2011/06/19(日) 21:16:42.17
typedefサンッぱねえっす
0028デフォルトの名無しさん2011/06/20(月) 12:22:03.51
すみません。
BYTE配列に、char配列に入れるような文字列(と同じデータ)を、char*から入れたいのですが上手く行きません。

char Cbuff[128] = {"朝日"};
char* pCB = &Cbuff[0];
BYTE Bbuff[128];
memcpy(&Bbuff[0], pCB, sizeof(*pCB)); // 146の整数が入ってしまいます。
sprintf_s((char*)&Bbuff[0], 128, "%s", *pCB); // アクセス違反のエラー。

私は何が理解できておらず、どこを間違っているのでしょうか?
0029デフォルトの名無しさん2011/06/20(月) 12:35:00.49
sizeof(*pCB)は1になるけどいいの?
>sprintf_s((char*)&Bbuff[0], 128, "%s", *pCB);
*pCBの"*"要らない
ポインタの理解がまったく足りてないので
勉強しなおせばいいよ
0030デフォルトの名無しさん2011/06/20(月) 12:44:10.87
sizeofの使い方も間違ってる
勉強しなおしてこいカスが
0031デフォルトの名無しさん2011/06/20(月) 13:18:53.61
こりゃぁ理解まで遠いわ、というのがイッパツでわかるなw
よくわかってないのにやろうとしてるのが丸見えになってる。
0032デフォルトの名無しさん2011/06/20(月) 13:37:44.64
> よくわかってないのにやろうとしてるのが丸見えになってる。
これをクリアしないと前に進めない。
よくわかってないのにやろうとするのは悪くない。ただなかなか前へ進めないだけだ。
水前寺清子も歌ってる。でも3歩より下がってはいけない。
0033282011/06/20(月) 14:38:31.77
>>29-32 ご助言ありがとうございます。sprintf_sの方は言われて見れば%sは文字列の先頭を送るんですから、実体送るだなんて大間違いですね・・。
そしてsizeof・・・実体の大きさを測ってもらう と思っていたら大間違いなんですね。
ポインタが指す変数のサイズをちゃんと測ってくれるものなんですね。
双方思った通りには動いてくれましたが、まだ何か勘違いしているかもなのでポインタについて再学習を始めました。 
あまり人様の見よう見まねでコードを継ぎ接ぎしない方が身の為ですね・・。色々ご助言ご指摘、ありがとうございました。
0034デフォルトの名無しさん2011/06/20(月) 14:53:07.08
意外と検索能力高かったな
延々と質面攻めになるのかと思ってたwwwwww
0035デフォルトの名無しさん2011/06/21(火) 01:39:12.73
C++は名前空間があるから大規模開発でも問題なくやれるよね〜
0036デフォルトの名無しさん2011/06/21(火) 07:04:39.15
GUIでプログラムを作りたいんですが何かおすすめのライブラリとかあります?
0037デフォルトの名無しさん2011/06/21(火) 12:19:04.39
>>36
Qt
0038デフォルトの名無しさん2011/06/21(火) 16:26:00.67
クラスと構造体の違いって何ですか?
0039デフォルトの名無しさん2011/06/21(火) 16:29:11.24
デフォルトの可視性とデフォルトの継承指定が違う
0040デフォルトの名無しさん2011/06/21(火) 16:46:52.15
触れる手順を強要し自分をさらけ出さない女王様タイプがクラス
股を開いて好きにしてと半マグロタイプが構造体

どっちも調教しだいなんだけどな
0041uy ◆yyC0rYWEq2 2011/06/21(火) 20:06:15.32
>>40
きもちわりーんだよ死ね
0042uy ◆yyC0rYWEq2 2011/06/21(火) 20:09:16.04
>>35
おまえそれ本気でいってんならマジでレベル低い
C,C++しかやったことないのか?市ね世ゴミ
ネームスペースとかゴミみたいな概念でしかない
本来やたら、それは使うべきではなく

思考停止して、とりあえず単純にささっとかきたいときに使う機能だぞ >> ネームスペースw

マジでゴミなんだな・・・・・・・・・・・・・・
0043デフォルトの名無しさん2011/06/21(火) 23:38:26.13
uy ◆yyC0rYWEq2 は中卒

216 名前:uy ◆yyC0rYWEq2 [sage]: 2011/06/21(火) 04:57:05.12
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
0044デフォルトの名無しさん2011/06/22(水) 00:37:39.63
チャットソフト作りたいです
参考サイト教えてください
0045デフォルトの名無しさん2011/06/22(水) 00:42:41.56
>>44
http://irc.nahi.to/
0046デフォルトの名無しさん2011/06/22(水) 00:44:53.90
>>44
http://html5demos.com/web-socket
0047デフォルトの名無しさん2011/06/22(水) 19:26:45.58
質問です。
std::stringですが、c_str()があるということは、
メモリの連続性というのは保証されているのでしょうか?
(可変長なのに、どうやって連続性持たせているのかは、私にはさっぱり想像もつきませんが)
0048デフォルトの名無しさん2011/06/22(水) 19:33:06.75
c_str()の有効期限は更新するまで。
0049デフォルトの名無しさん2011/06/22(水) 19:47:24.50
>>48
回答ありがとうございます。ただ説明が端的すぎで、もう少し補足をいただけると助かります。
「更新するまで」というのが、よくわかないのですが、
初期化、または代入時までということでしょうか?(要素や文字列を追加したらダメということ?)
0050デフォルトの名無しさん2011/06/22(水) 19:52:06.47
>>49
non-constantなメンバーを呼ぶまで。
0051デフォルトの名無しさん2011/06/22(水) 20:08:02.25
>>49
度々すみません。
「non-constantなメンバー」というのが、どういうものか、よく分からないんですが、
append() ,assign() ,at(),begin() ,c_str() ,capacity() ,compare()とか、メンバー関数がありますけど、
具体的にはどのメンバー関数が「non-constantなメンバー」になるんでしょうか?
(もしくは、non-constantとそれ以外(constant?)の区別はどこで分かるのでしょうか?)
よろしくお願いします。
0052デフォルトの名無しさん2011/06/22(水) 20:12:55.35
>>51
std::stringのマニュアルやインクルードファイル(string)にconstantなメンバーは特記してある。
それ以外がnon-constant

例:
size_t length() const;
0053デフォルトの名無しさん2011/06/22(水) 20:44:38.06
>>52
なるほど。丁寧な解説ありがとうございます。
0054デフォルトの名無しさん2011/06/22(水) 21:06:58.66
VC++で/MDオプションをつけてマルチスレッドdll版のランタイムを指定してコンパイルして、出来たlibがあるとします。
このlibを人にあげて、その人がリンクするときに、リンカはどうやってlibcではなくmsvcrtが必要だとわかるのですか?
libファイルの先頭に、そのlibで使われている未解決のCランタイムライブラリへの参照がシンボルの形で埋められていて、そこに一緒にマルチスレッド版のmallocが要るよ!
とか書かれているの?
それともマルチスレッド版のmallocとシングルスレッド版のmallocは違う名前になってlibファイルに埋まるの?
たとえばコンパイラに/mdオプションをつけたら、_malloc_of_msvcrtって名前でlibに埋め込まれるとか。
(いや、ほんとにそんな変な名前になるとは思わないけど、例えば。)
0055デフォルトの名無しさん2011/06/22(水) 23:41:38.91
0のものを1にするのに
インクリメントと1代入どっちが速いの?
0056デフォルトの名無しさん2011/06/22(水) 23:54:52.44
速度は実測が基本
0057デフォルトの名無しさん2011/06/22(水) 23:57:16.17
どっちかが速かったにしろ、
++と、+=1(リテラルの1を加算)だったら、
コンパイラが速いほうに統一してくれるだろ。
0058デフォルトの名無しさん2011/06/23(木) 00:47:37.65
::だったり.だったり->だったり頭がはげそう
0059デフォルトの名無しさん2011/06/23(木) 00:48:11.02
おそらく、1代入だろうな。
1加算は、メモリからのロード、加算、ストアのステップが必要。
1代入はリテラルをストアするだけ。
0060デフォルトの名無しさん2011/06/23(木) 09:21:04.41
ボトルネックになるまではそんな細かいことを気にするだけ無駄
意味的に読みやすいほうを選択するべきだろう
0061デフォルトの名無しさん2011/06/23(木) 11:14:12.80
if(a){
if(b){
処理
}
}
if(a&&b){
処理
}

って違い出てきますか?
書きたいコードは6か7ぐらいの条件がついて無限ループ内に書くので
0062デフォルトの名無しさん2011/06/23(木) 11:26:46.36
C/C++ではショートサーキットが言語仕様で規定されているから、
ロジック的な違いはない。
速度的に違いがあるコードが生成される可能性は無いか?
と問われれば、とても間抜けなコンパイラが無駄なコードを吐く可能性を
否定できないので「違いが出る可能性はゼロではない」。
0063デフォルトの名無しさん2011/06/23(木) 12:09:00.29
すみません。
char str[5000][800][500]; // 5000行 800項目 1個500byte
に入っている文字列をstrcatで800項目連結してはfputsして、それを5000行分行っているのですが、
大したデータ量ではないのにやたらと時間がかかってしまいます。(1回40秒くらいでしょうか・・)

もっと素早く処理するにはどうすれば良いでしょうか?
0064デフォルトの名無しさん2011/06/23(木) 12:14:34.24
出力の回数を減らして纏めて出力するといいよ
0065デフォルトの名無しさん2011/06/23(木) 12:17:39.63
構造体の配列!
0066 忍法帖【Lv=9,xxxP】 2011/06/23(木) 12:19:35.73
>>63
strcat()しない。
どうせfputs()するんだから、最初からfprintf()してしまえばいい。
多少は早くなるはずだ。
それでダメなら、fprintf()もやめて小刻みにfputs()かな。
cygwinみたいな環境でもなければ、どうせバッファリングされるから。

つーか、大した量だよw
0067デフォルトの名無しさん2011/06/23(木) 12:20:41.03
>>47
C++0xより前では連続性は保証されていない
ただ、普通に触れる処理系ならまず大丈夫なので気にする必要はない(0xより前の古いものでも大丈夫、つかダメなの聞いたことがない)
可変長なのに連続しているのは単に現在確保してるメモリを超えるなら確保しなおしてるだけだよ
0068デフォルトの名無しさん2011/06/23(木) 12:23:35.50
40秒が連結の処理のせいでかかってる時間とは思えないから
単に端末の問題じゃ?fputsコメントアウトしたら一瞬で終わるか?
0069デフォルトの名無しさん2011/06/23(木) 12:23:46.38
おなかがすいたんだがどうすりゃいいの?
0070デフォルトの名無しさん2011/06/23(木) 12:24:23.20
メモリ不足じゃよ
0071デフォルトの名無しさん2011/06/23(木) 12:33:19.17
確かに。2GBの配列でメモリスワップしてたり。
5000行持つのを諦めるとか、可変長にするとかしないと根本解決にならない気が。
0072デフォルトの名無しさん2011/06/23(木) 13:14:09.19
2GBを「大したデータ量ではない」とか、すごい時代になったもんだ。
0073632011/06/23(木) 13:37:09.99
色々なご意見ありがとうございます。
fputsを減らさないと重くなる と先入観が有ったのですが、
strcatを全部消してfputsだけにしたら2秒弱で終わりました;
時と場合でやり方は変えないとだめなんですね。 ありがとうございました。
0074632011/06/23(木) 13:42:02.48
2GB・・・2MB・・?(´・ω・`)
0075デフォルトの名無しさん2011/06/23(木) 14:50:15.98
1K=1000として
5000 * 800 * 500 = 2,000,000,000 = 2,000,000K = 2,000M = 2G
0076デフォルトの名無しさん2011/06/23(木) 14:57:55.58
>>74
http://codepad.org/IHZVrSjS
0077632011/06/23(木) 19:07:13.11
2Gも使う事になってたんですね・・orz
でもタスクマネージャの稼動中のプロセス見ても100KBすらメモリ使っていない・・。
扱うファイルが10〜300KBくらいだと全部メモリ確保しないのかな・・なんでだろう・・。(´・ω・`)
0078デフォルトの名無しさん2011/06/23(木) 20:09:47.79
仮想メモリ
0079632011/06/24(金) 23:43:56.48
大き過ぎるから仮想メモリに確保されている・・? んですね。 ありがとうございました。
0080デフォルトの名無しさん2011/06/25(土) 21:48:20.84
映像のフレームを定期的に処理するプログラムを作っています。
たとえば30fpsですと33.33ミリ秒周期なので処理間隔を33ms or 34msにして1秒間あたりの
処理フレームが設定どおりにしたいと考えています。
で、間隔を33msにするか34msにするかというところの処理を書いてみたのですが、
もう少し良い書き方が無いものかご教示お願いします。
0081802011/06/25(土) 21:49:29.06
下記がソース抜粋です。
int count=1;//1sec計測用
DWORD fps, cycle=0;
DWORD prev_time=0, cur_time=0, sum_time=0;
double cycle_d=0.0, cycle_int=0.0;

fps=30;//入力映像のFPS値
prev_time = timeGetTime();
cycle_d=(double)modf((double)1000.0/fps, &cycle_int);//フレーム周期(整数部、小数部)求める

while(sum_time<CONTENTS_TIME){//入力映像の長さ(ミリ秒単位)
 cur_time = timeGetTime();
 cycle=(int)cycle_int+((int)(cycle_d*(double)count)-(int)(cycle_d*(double)(count-1)));//←もっとスマートなやり方はないでしょうか?
 if(cycle<=cur_time - prev_time){

/* ここにフレームの処理を記述 */

  prev_time=cur_time;
  count++;
 }
}
0082802011/06/25(土) 21:51:37.84
何度もすいません。
fps値と入力映像の時間は外から与えるようにする予定です。
0083デフォルトの名無しさん2011/06/25(土) 22:18:42.02
何度も糞レスしやがって!
ゲーム小僧死ねよ
0084デフォルトの名無しさん2011/06/25(土) 22:21:26.65
コーディングにセンスないね君。プログラミング止めたほうが良いよ
0085デフォルトの名無しさん2011/06/25(土) 22:25:17.83
こんなスレにセンスあるやるいるのか?
0086デフォルトの名無しさん2011/06/25(土) 22:31:24.24
センスは相応の努力をすればある程度磨けるはずなので、それをもって止めた方がよいというのはおかしい
0087デフォルトの名無しさん2011/06/25(土) 22:31:31.68
^を付けされる意味って?
0088デフォルトの名無しさん2011/06/25(土) 23:28:09.65
>>87
日本語でOK
0089802011/06/25(土) 23:32:27.28
>>83-84
拙いコードで恐縮です。
ゲームではありません。
センスが無いのは承知しておりますが
他に食べ方を知らないのです。
申し訳ないですがご教示願えれば幸いです。
0090デフォルトの名無しさん2011/06/25(土) 23:43:34.81
食ってるとまで言うかねえ?
2ちゃんでそれを聞くような人が。
0091802011/06/26(日) 00:17:41.15
>>90
?
「食べてる」というのは偉そうな書き方でしたでしょうか?
転職するあてもないという意味です。
0092デフォルトの名無しさん2011/06/26(日) 00:26:15.12
これがカーナビあたりの組み込み系SEの実態か?
0093802011/06/26(日) 00:30:14.90
よろしければ女の食べ方もご教示願えれば幸いです。
0094デフォルトの名無しさん2011/06/26(日) 02:52:21.20
今まで普通に動いていたプログラムが急に動かなくなってしまいました
問題の箇所は、普通にファイルをオープンしているだけなのですが・・・
std::ifstream(filename);
プログラムがここにきたときに強制終了してしまいます。
なぜなのでしょうか・・・
QtCreatorで開発しています
0095デフォルトの名無しさん2011/06/26(日) 03:03:33.81
☓ QtCreator

◯ Qt Creator
0096デフォルトの名無しさん2011/06/26(日) 08:17:30.35
Qtを使わないようにすれば?
0097デフォルトの名無しさん2011/06/26(日) 15:56:43.38
C++の仮引数の省略ってコンパイラが適当に引数を付加して処理しているの?
0098デフォルトの名無しさん2011/06/26(日) 15:59:46.13
そうだよ
0099デフォルトの名無しさん2011/06/26(日) 18:09:28.68
いまだにprintf使っているアホはいい加減死ねよ
0100デフォルトの名無しさん2011/06/26(日) 18:09:57.57
>>98
どうもです
0101デフォルトの名無しさん2011/06/26(日) 18:11:52.80
>>99
何使えばいいの?
0102デフォルトの名無しさん2011/06/26(日) 18:13:31.36
>>101
え?マジでいってんの?
0103デフォルトの名無しさん2011/06/26(日) 18:14:19.90
>>102
マジだからどうすれば教えてくださいよwwwwwwwww
0104デフォルトの名無しさん2011/06/26(日) 18:18:06.68
>>103
std::cout
0105デフォルトの名無しさん2011/06/26(日) 18:21:23.29
それこそゴミじゃん
あんな使いにくいものよく使うね
0106デフォルトの名無しさん2011/06/26(日) 18:21:59.42
>>105
え?マジでいってんの?
0107デフォルトの名無しさん2011/06/26(日) 18:23:00.73
>>105
同意w
C++はOOPLなんでオブジェクトシコーっぽくいきまつ、
さっそくオペレータ<<をオーバーライドしてみますたwww

みたいな悲しさを感じる。
0108デフォルトの名無しさん2011/06/26(日) 18:26:04.64
(・o・)<<"いいじゃん"
0109デフォルトの名無しさん2011/06/26(日) 18:52:01.27
>>107
全く同意。

C++はオペレータをオーバーライドできまつ。
一例として入出力はその結果<<や>>をオーバーライドすることでこんなふうに書けまつ。

みたいのをずっと引きずってるように見えてならない。
0110デフォルトの名無しさん2011/06/26(日) 23:20:10.46
ただのビジュアル的なもののためだけに
名前空間使いまくっている馬鹿をどうにかしてください
0111デフォルトの名無しさん2011/06/27(月) 01:36:41.02
stringが入出力もってればいんじゃねーの?

String text = String("h") + "e" + "l" + "l" + "o";
text.setWriteTagert(IO::Console);
text.write();

text.setReadTarget(IO::Keyboard);
text.read();
0112デフォルトの名無しさん2011/06/27(月) 01:41:04.07
IOをクラスに実装するってありえん。
0113デフォルトの名無しさん2011/06/27(月) 01:59:31.92
>> 111 いやいや。
ミニ言語になってしまってる C のフォーマット関数がまづ問題で
フォーマッタ出力とストリーム出力機能を別モノにしまってイイのかという問題もあるし(sprintf とか便利だけどなんか歯痒いじゃん?
オブジェクトの役割的にiostream 自体がデフォで中間状態をもってイイのかてのもあるし
0114デフォルトの名無しさん2011/06/27(月) 04:51:13.41
結局どうしたいんだ?
0115デフォルトの名無しさん2011/06/27(月) 12:13:00.00
つまりみんなboost::formatがお望みか!
cout << boost::format("%05d %x %f %%") % 200 % 255 % 3.33 << endl;
0116デフォルトの名無しさん2011/06/27(月) 13:42:53.50
各OS実環境向けの文字処理専用スクリプト言語をC/C++規格へマージして欲しい。
バイナリで扱いたいんジャーとかストリーム関数ラブの人向けに旧方式もフリーズして互換維持の方向で
0117デフォルトの名無しさん2011/06/27(月) 17:56:50.25
class CManiac {
public:
bool operator<(const CManiac& rmaniac) const {
// *this が rmaniac よりも小さいという条件をコーディングし、bool 値を返す。
return b;
}
}

上の例のような,仮引数と関数定義の間にあるconst修飾子の表す意味が分かりません.
どなたかぜひ教えてください.
0118デフォルトの名無しさん2011/06/27(月) 18:01:47.39
>>117
おおざっぱに噛み砕いて言うと
メンバ変数をいじらないよーっていう表明
オブジェクトをconstで作っても呼び出せるメンバ関数になる
0119デフォルトの名無しさん2011/06/27(月) 18:04:41.10
>>117
位置がなぞめいててイラッとさせるが、意味は>>118の言うとおり。
constメンバ関数、っていう言い方をしたりする。
0120デフォルトの名無しさん2011/06/27(月) 18:26:07.42
>>117
その関数の中ではthisポインタにconstが付いている、という見方もできる。
0121デフォルトの名無しさん2011/06/27(月) 19:33:43.66
>>118,119,120

謎が解けました.
解説ありがとうございました.
0122デフォルトの名無しさん2011/06/27(月) 19:37:32.78
他国語出力したいんですが、上手くできません。何かいい方法ありませんか?
ソースコードは間違っていないはず。例えば韓国語だと
#include<iostream>
#include <fstream>
using namespace std;
int main(){
    char s[10]="테스트";
    ofstream ofs("test.txt");
    ofs<<s<<endl;
    ofs.close();
    return 0;
}
0123デフォルトの名無しさん2011/06/27(月) 20:19:48.10
韓国語が標準の環境、韓国で売っているC++を使うとうまくいくと思う
韓国語Winと韓国語VCでどうぞ
0124デフォルトの名無しさん2011/06/27(月) 21:14:46.55
別に韓国語限定じゃなくて、中国やロシアとか色々な言語に対応したいんだ
というか、その国向けの開発環境じゃなきゃ出来ないとかあるはずないよね
0125デフォルトの名無しさん2011/06/27(月) 21:40:09.92
unicodeつかう
0126デフォルトの名無しさん2011/06/27(月) 22:02:06.16
使用者の知能によりけり
0127デフォルトの名無しさん2011/06/27(月) 22:12:17.66
>>125
charで書き込み(読み込み)したいんですよ。
0128デフォルトの名無しさん2011/06/27(月) 22:14:01.12
文字列型使えよ
0129デフォルトの名無しさん2011/06/27(月) 23:55:46.00
char *hoge[]
と
char hoge[]
の違いがわかりません
0130デフォルトの名無しさん2011/06/27(月) 23:57:31.22
>>125
ありがとう、いろいろ調べてるうちにそのほれにたどり着いたけど、処理超面倒だね
>>128
文字列型ってstring?unicodeで使ったらまともに動作しなくね?
0131デフォルトの名無しさん2011/06/28(火) 00:02:56.19
>>129
char *hoge[255]みたいな宣言だとすると
*hoge[255]=*hoge×255
hoge[255]=hoge×255
0132デフォルトの名無しさん2011/06/28(火) 00:03:51.93
>>130
TCHR
あたりで
0133デフォルトの名無しさん2011/06/28(火) 00:04:46.35
>>131
ちがうよ
0134デフォルトの名無しさん2011/06/28(火) 00:06:13.53
>>131
>>133
どうなんですか?
0135デフォルトの名無しさん2011/06/28(火) 00:17:06.46
クラスClの構造体Stのポインタを
別のヘッダーファイルで使用するため、
前送り宣言したい
(struct Cl::St;みたいな)
何かいい方法ない?
0136デフォルトの名無しさん2011/06/28(火) 00:44:27.39
>>122
imbue()しなきゃだめだろ
処理系が韓国語に対応してるか調べてみ
無理ならgccのeucで試してみるとか
0137デフォルトの名無しさん2011/06/28(火) 00:48:23.40
>>131
オマエのレスをつい最近見た事があるぞ
0138デフォルトの名無しさん2011/06/28(火) 01:27:03.69
ファイルからデータを読み取り(例えば10人ほどの年齢、性別、ナンバー)
その値を複数の関数であれこれ操作するとき
この変数はグローバル変数するのがベターなんですかね?


・グローバル変数あり
int age,sex,no
関数1(age,sex,no)
 関数2(age,sex,no)
 関数3(age,sex,no)

・グローバル変数なし
int age,sex,no
関数1_1(age)return age;
 関数2_1(age)return age;
 関数3_1(age) return age;
関数1_2(sex)return sex;
 関数2_2(sex)return sex;
 関数3_2(sex) return sex;
関数1_3(sex)return no;
 関数2_3(no)return no;
 関数3_3(no) return no;


あり・なしを比較するとこういうイメージなのですが
0139デフォルトの名無しさん2011/06/28(火) 01:35:25.63
モノステートパターンを使う
0140デフォルトの名無しさん2011/06/28(火) 01:37:17.01
>>4
Cはもう暫くするとマルチスレッド対応になるよ
0141デフォルトの名無しさん2011/06/28(火) 01:52:09.29
テンプレート内の構造体の前送り宣言の方法がわからない

struct Mytemplate<>::Mystruct;
みたいなことをしたい
0142デフォルトの名無しさん2011/06/28(火) 01:54:03.73
template<type t>
struct Mytemplate<t>::Mystruct;
でいけないか
0143デフォルトの名無しさん2011/06/28(火) 02:24:51.92
>>122
gcc4.5.2(MinGW) + Eclipse CDTでimbueする事無く普通に表示されたぞ
多分入力コードが10進UNICODEになってるのがまずいんじゃないか?

UNICODEにしたら普通に表示された
0144デフォルトの名無しさん2011/06/28(火) 02:40:10.23
getline関数で文末判定はどうすればよいのでしょう?

while (fin.getline(addata[i].name,50))
{
 処理
i++
}

行末ならgetlineで問題ないですが・・・
0145デフォルトの名無しさん2011/06/28(火) 07:16:00.73
あなたが何をもってして文末を判定するかじゃないのかい
0146デフォルトの名無しさん2011/06/28(火) 08:01:39.06
ファイルの最後と文末は違うぞ?
0147デフォルトの名無しさん2011/06/28(火) 08:05:23.30
//sub.h//
int check(){
int test;
static int chk;
test = チェック関数 ;
if( test>1){chk++;}
else{chk=0;}
return chk;
}
-------------------
#include sub.h
main(){
int chk1;
while(){
if(check(check()==1){処理}
}
}
とある処理が連続では実行されず、一度休むまで受け付けないという感じのプログラムです
#include sub.h
main(){
int chk0;
chk0=check();
while(){
if(chk0==1){処理}
if(chk0)>40){別処理}
}}
このよう変更するとstatic int chkの値が40を超えるとリセットされず無限に増え続けるようになります
何が問題なのでしょうか?
0148デフォルトの名無しさん2011/06/28(火) 09:04:10.59
[チェック関数]が2以上を返すとchkがインクリメントされるのだから、[チェック関数]がおかしいんだろう。
それ以前にchk0=check();がループの外に出てるんだけど?
それ以前にコンパイ(ry
0149デフォルトの名無しさん2011/06/28(火) 09:06:11.76
関数checkは1回しか呼ばれていないのに増え続けるとな?
0150デフォルトの名無しさん2011/06/28(火) 11:22:27.10
>>138
関数の仕様がおかしいんじゃね?
グローバル変数を使う位なら引き数要らないだろ。
つーか、グローバル変数を使う積極的理由がない。
例えば、関数1の中でageその他に触れたいなら、
・ageその他を構造体に纏めて参照渡しにする。
・ageその他を構造体に纏めてポインタ渡しにする。
・ageその他を構造体に纏めて引き数で渡して戻り値で受け取る。
の三択でいいよ。
0151デフォルトの名無しさん2011/06/28(火) 17:08:29.67
なんでC/C++はスレッドライブラリが標準でないんでしょうか。
標準であればもっとわかりやすいと思うんですが。
0152デフォルトの名無しさん2011/06/28(火) 17:11:45.53
環境に依存するから
0153デフォルトの名無しさん2011/06/28(火) 17:12:01.72
0xでstd::thread入ったじゃん
0154デフォルトの名無しさん2011/06/28(火) 17:19:21.97
boost::thread「ワイが面倒みてやるで」
0155デフォルトの名無しさん2011/06/28(火) 17:21:35.02
最適化の抑制をどうすればいいのかわからん
0156デフォルトの名無しさん2011/06/28(火) 17:48:55.47
文字列『0 1 3 1 0 3 2 1 3 0』みたいな変動するデータがあるとして
それをsscanf系で配列に格納したいのですが
スマートなコードの書き方ってないですか?
0157 忍法帖【Lv=12,xxxPT】 2011/06/28(火) 17:49:23.05
>>155
つ[volatile]
01581382011/06/28(火) 17:50:45.96
>>150
確かにグローバル変数をつかっているのに引数はおかしな話でした。

まとめて渡すとなると

struct hito{
age
sex
no
}

struct hito eigyo[10];

関数1(eigyo)
 関数2(eigyo)
  関数3(eigyo)

ってイメージですかね
0159デフォルトの名無しさん2011/06/28(火) 17:53:29.26
volatileって明確な言語仕様ないだろ
0160デフォルトの名無しさん2011/06/28(火) 17:54:57.53
メモリバリアの問題もある
0161デフォルトの名無しさん2011/06/28(火) 18:43:08.38
fopen("data\\data01\\data02\\00001.txt")
等のファイル指定の文字列を

#define DATA_PATH "data\\data01\\data02"
と定義して

fopen("DATA_PATH+00001.txt")のような事をしたいのですが
どうすればよいでしょ?

0162デフォルトの名無しさん2011/06/28(火) 18:46:09.36
>>161
fopen(DATA_PATH"00001.txt")
01631612011/06/28(火) 19:42:09.21
どもです
0164163ではない2011/06/28(火) 20:35:20.62
>>162
えっ
printf("hoge""fuga");
これはなぜ動くのですか?
0165デフォルトの名無しさん2011/06/28(火) 20:39:02.70
"hoge""fuga"と"hogefuga"は同じ意味
printf("%d\n"
    "%s", 1, "a");とか改行してもいい
0166デフォルトの名無しさん2011/06/28(火) 20:45:28.77
>>165
まじか、そうだったのか
ありがとうございます
0167デフォルトの名無しさん2011/06/28(火) 20:53:40.45
マウスの位置を調べる時、判定がこんな感じだとします

☆☆☆△△△□□□□
☆☆☆△△△□□□□
☆☆☆△△△□□□□
☆☆☆△△△××××
■■■■■■××××
■■■■■■××××
■■■■■■○○○○
■■■■■■○○○○

if(x<400) //中央の左右判定
{
  if(y<300) //左側の高さ判定
   {
   if(x<200)   { ☆; } //左上の左右判定
   △; 
   }
  ■; 
 }

細かくなればなるほど、if文が増えてしまうのは仕方ないのでしょうか?

   
0168デフォルトの名無しさん2011/06/28(火) 20:55:49.67
範囲をRECTで持っておいてPtInRect使え
01691682011/06/28(火) 23:05:06.29
RECTとPtInRectを理解できました(思い通りの実行結果になってくれました)

インターフェース関連のマウス位置はこれで範囲指定するのが定番なのかな・・・?
0170デフォルトの名無しさん2011/06/28(火) 23:14:26.01
>>169
プラットフォーム、使用ライブラリ等でいくらでも変わってくると思われ
0171デフォルトの名無しさん2011/06/29(水) 01:54:29.00
ダウンキャストってなぜいけないんです?
0172デフォルトの名無しさん2011/06/29(水) 02:02:17.44
静的な保証がなくなる
0173デフォルトの名無しさん2011/06/29(水) 03:07:07.26
文字列で
9000
50
700
3
を

0,9,0,0,0
0,0,0,5,0
0,0,7,0,0
0,0,0,0,3

と言う感じに桁を合わせる&分解にはどうすれば良いのでしょうか?(カンマは不要です)


0174デフォルトの名無しさん2011/06/29(水) 03:16:26.39
>>172
ありがとう
0175デフォルトの名無しさん2011/06/29(水) 03:41:01.37
sprintf
01761732011/06/29(水) 04:43:25.89
シャワーを浴びたら、解決方法が思いつきました(駄目かもしれないけど)

スルーしてください
0177デフォルトの名無しさん2011/06/29(水) 04:46:18.17
これがゆとりか
0178デフォルトの名無しさん2011/06/29(水) 06:05:24.05
構造体の引渡しについてですが、ネットで調べると大体こんな感じです。

struct ABC{
int x;
int y;
};

main(){         //↑メインより先に宣言しているからグローバル扱い?
struct ABC bbb;
func(bbb)
{

int func(struct ABC test)
{
test.x
test.y
}

または
int func(struct ABC *test)
{
test->x
test->y
}

でも、構造体をグローバルで宣言しているからわざわざ引数にする必要が無いと思うのですが?
グローバルでなくローカルで構造体を宣言した場合は引数として使えないようですし
0179デフォルトの名無しさん2011/06/29(水) 06:23:08.55
構造体とインスタンスについて考えよう
0180uy ◆hi.ht/Isu2 2011/06/29(水) 06:28:59.91
>>178
構造体をわざわざ引数にする必要が無いっていうのはいいところに目を付けてるよ
それは、ただ作法的にローカルにしちゃってるだけ
型宣言を、ローカルに閉じ込めて置けないのが、痛々しい言語仕様だよね


C,C++みたいな中途半端な出来栄えの言語だとね、どう頑張っても完璧に組むのは不可能に近いから
誰がどういう説明していようと、そういうのは無視して
かきたいようにかいたほうがいい

特にC,C++を、初心者時代を超えても未だに使い続けている奴ってのは、頭がおかしいので
頭のおかしいソースコードで解説をしている事が多い
Web上にはそういうサンプルがとても多いので、だまされてはいけない  そして、適当にある程度のところまで覚えたら

さっさとC,C++を捨てること
0181デフォルトの名無しさん2011/06/29(水) 06:35:07.52
きちがい
0182uy ◆hi.ht/Isu2 2011/06/29(水) 07:32:00.39
はいはい天使天使
0183デフォルトの名無しさん2011/06/29(水) 07:39:58.63
つか根本的になにもかも間違ってるから無視してやったほうがいい
0184デフォルトの名無しさん2011/06/29(水) 07:53:23.38
構造体関数ってよーわからん

普通に

func(){
bbb.x
bbb.y
}

って使えるから
01851782011/06/29(水) 09:05:01.17
構造体は同一ファイル内の関数なら利用可能だが
別ファイル(ヘッダーファイル等)の関数では利用できない

逆にクラスなら使える
素人はとりあえずクラスで定義しておけ

って感じですか?
0186デフォルトの名無しさん2011/06/29(水) 09:08:08.10
どこにそんなことが書いてあったんだ?
structもclassもそんなに違わない
最初からついてるアクセス指定子がprivateかpublicかの違いだけ
構造体もヘッダで宣言すればincludeしたcppから使える
0187デフォルトの名無しさん2011/06/29(水) 09:08:28.65
>>185
全く違う
class と structは
メンバと継承のときにpublicとかprivateとかつけなかったときのデフォルトが違うだけで他は全く一緒

(一応typeidしたときのname()も違うが)
01881782011/06/29(水) 09:30:22.52
186
>構造体もヘッダで宣言すればincludeしたcppから使える

cppで宣言した構造体を
ヘッダーファイルで扱うのは無理なんですか?

-----main.cpp-----
void hoge3(strcut hoge hoge1)

struct hoge{
int x;
int y;
}

struct hoge hoge1;

main(){

}

hoge3(hoge hoge1){
hoge1.x
hoge1.y
}

これは動作するのですが、hoge3()をヘッダーファイルに表記すると動作しなくなってしまって

0189デフォルトの名無しさん2011/06/29(水) 09:35:42.12
いや動作してるわけ無いだろwwwwwww
適当なこと言うなしね
0190デフォルトの名無しさん2011/06/29(水) 09:36:09.74
>>188
宣言が見えなきゃ使えるわけないだろ
複数のcppファイルから構造体使いたいならヘッダに宣言しとけ
0191デフォルトの名無しさん2011/06/29(水) 09:38:32.89
動作以前にコンパイルできねーだろ。コンパイラ通さなくても一目瞭然にわかる。
01921782011/06/29(水) 09:41:50.14
すいません
大体こういう感じで動いてるという意味です
そのあたりは補完してください
0193デフォルトの名無しさん2011/06/29(水) 09:48:18.99
cppとヘッダの話に便乗して、超初歩的な質問を
cpp1つ。残り全部ヘッダファイル。じゃ駄目なん?
ヘッダファイルとcppの違いがワカラン!
0194デフォルトの名無しさん2011/06/29(水) 09:50:04.79
>>193
複数のcppにするのは分割コンパイルってのをしたいんだよ
それがどういうものかはググッてくれ
説明すると長いから
0195uy ◆hi.ht/Isu2 2011/06/29(水) 10:53:02.82
だぁかぁらぁ C++なんて捨てろっつってんだろ????????????????????
このあたりが滅茶苦茶なんだよ
ゲームか何かが作りたいわけェ? C#やっとけよボケが
作法的にはこう

---------------------a.h-------------------------
struct hoge{
  int x;
  int y;
};

void hoge3(struct hoge * hoge1);

-----------------------a.cpp--------------------------
#include<stdio.h>
#include "a.h"

main(){
  struct hoge h = { 0 };
  hoge3( &h );
  printf("%d %d" , h.x , h.y ) ;
}

void hoge3(struct hoge * hoge1){
  hoge1->x = 33;
  hoge1->y = 44;
}

で、構造体の定義前に struct hoge hoge1 戸かやりたい場合は
struct hoge;  ← これで先に名前だけ押しておく必要がある
0196uy ◆hi.ht/Isu2 2011/06/29(水) 10:55:29.47
つまり、こう


---------------------a.h-------------------------
struct hoge;
void hoge3(struct hoge * hoge1);




-----------------------a.cpp--------------------------
struct hoge{
int x;
int y;
};


-----------------------わかったか?カス-------------------------

きいているのはC++のカスさのほう こうやって、「いちいち」 面倒な手続きをしなければならないのが C,C++
0197uy ◆hi.ht/Isu2 2011/06/29(水) 11:06:36.34

------と---り---あ---え---ず---お---し---え---と---い---て---や---る---け---ど------

で#includeについkて教えておくと
C,C++で
#  のついてる奴はすべてがsプリプロセッサなんだよl?
つまりコンパイル舞えに処理さレルってわけl

つまり、rrrr


#include "a.h"  ってやったらsz
a.h の内容が その場所に、コピペされるってこと


----------------------------------------------------------------------


----------------理-------解-------し-------た-------?---------------------------
0198 忍法帖【Lv=13,xxxPT】 2011/06/29(水) 11:12:57.56
捨てろと言っている対象についてのスレに居座る不思議。
で、しかも書いている内容が自称年齢に見合わないほど古臭い不思議。
0199デフォルトの名無しさん2011/06/29(水) 12:31:27.81
C++なんて捨てろといいつつ
拡張子以外全部C(笑)
0200デフォルトの名無しさん2011/06/29(水) 12:38:35.34
>>199
C++を知らないんですよ。そっとしておきましょう。
0201uy ◆KOAgYBL/Xg 2011/06/29(水) 13:04:26.94
C++なんて許されるのは19歳までだろ・・・・・
20超えてもC++やってる奴は低脳

いつまで無駄なことを続けるんだか
0202デフォルトの名無しさん2011/06/29(水) 13:11:54.05
そうだねー
ApacheやUNIXやFirefox書いてる奴は低脳ですよね
0203デフォルトの名無しさん2011/06/29(水) 13:14:16.02
DirectXやOpenGLも低脳さんがバインドしてくれるからC/C++いらないよね
0204uy ◆KOAgYBL/Xg 2011/06/29(水) 13:34:14.45
>>202
そういう奴らはC++なんて使ってないんだよ
仕事で扱ってるだけ。おれもC++を仕方なく「扱う」時はあるよ。
0205デフォルトの名無しさん2011/06/29(水) 13:38:31.82
なぜ仕方なく扱わなきゃいけないんですかねー?
なぜリプレースしようとするプロジェクトが出てこないんですかねー?
0206天使 ◆KOAgYBL/Xg 2011/06/29(水) 14:12:16.38
はいはい天使
0207デフォルトの名無しさん2011/06/29(水) 20:53:49.65
メンバ関数のオーバーロードって一種のポリモーフィズムになるんですか?
0208デフォルトの名無しさん2011/06/29(水) 21:55:14.50
>>207
一般にはそれはポリモーフィズムとは言わないなぁ
そもそもただの関数だってオーバーロードできるしな
0209デフォルトの名無しさん2011/06/29(水) 22:57:39.74
>>207
オーバーロードはオーバーロード
ポリモフは継承&オーバーライド
0210デフォルトの名無しさん2011/06/29(水) 23:06:01.67
ポリモフってロシア人にいそうだな
0211デフォルトの名無しさん2011/06/29(水) 23:12:09.74
オーバーロードをポリモーフィズムって説明してる人もいるよ・・・
0212デフォルトの名無しさん2011/06/29(水) 23:14:36.02
オーバーロードがポリモー・フィズムってwww
おまえほんとにオブジェクト指向りかいしてんのかおwww
0213デフォルトの名無しさん2011/06/29(水) 23:43:17.93
>>211
カンタンに想像付くから怖い。
「〜はデザパタの一種と言えるでしょう」
「俺俺デザパタつくってみました」
「オーバーロードはポリモの一種」

不正確なもんを押し通そうとする力が怖い。
0214天使 ◆KOAgYBL/Xg 2011/06/30(木) 04:16:49.99
そういう細かい定義ばっかり気にしているからおめーらはダメなんだよ

本でも書くん? そうでないなら細かい定義はいらない

殆ど変わらない概念でも別物であるもので
まだ名前のついていない概念にたいし、1個、1個、おれが付けていったら
明日から、数千個くらいIT用語増えるから覚悟しとけよ
0215デフォルトの名無しさん2011/06/30(木) 04:23:09.52
初歩的な質問です

int hoge[5]
この時hoge[5]が空だったら、10を入れる、というif文をつくるとしたらどういう条件にすればよいのでしょう?


初期値としてhoge[5]={10};と設定するのではなく

全部入らない場合の配列の空きスペースをみつけて埋めるという処理がしたいので
0216デフォルトの名無しさん2011/06/30(木) 05:11:22.97
例えばhogeに入れる値が負の値を取らないと決まっているなら、
hogeの要素全てにあらかじめ-1でも入れておいて

if(hoge[5] == -1) hoge[5] = 10;

とでもすればよろし。
0217天使 ◆KOAgYBL/Xg 2011/06/30(木) 06:02:38.20
C,C++で空 なんてのはねーんだよ
NULLさえ実装されていない
だから何らかの初期値を与えるしかな、 基本的にそれには0を使うのがベスト
0って数字もときより使う配列ならマイナス数値とかにして、「ごまかす」しかない

Cなんてさっさとやめちゃえよ
0218デフォルトの名無しさん2011/06/30(木) 06:45:19.92
>>216
構造体の配列だから入れてからだと面倒かと思ったのですが、普通にそうやることにします
0219デフォルトの名無しさん2011/06/30(木) 09:20:31.41
>>215
std::vector<int> hoge;
if(hoge.empty())
{
}
というのは可能だ 参考までに
0220デフォルトの名無しさん2011/06/30(木) 09:51:22.69
optional使うといいよ
0221デフォルトの名無しさん2011/06/30(木) 10:00:55.10
> 全部入らない場合
よくわからん
そもそもhoge[5]なんて存在しないぞ
0222デフォルトの名無しさん2011/06/30(木) 10:01:07.41
それ以前に
int hoge[5]で
hoge[5]はねーだろそこを指摘しろよ

>>217
ぬるぽはC++では作られたろーがボケ
0223デフォルトの名無しさん2011/06/30(木) 10:05:34.95
要素数決まってんだし足りるかどうかわかるだろ
0224デフォルトの名無しさん2011/06/30(木) 11:22:53.95
ファイルの読み込みとかじゃね?
MAXが5個で1〜5個で変動する

プログラムって自分好みに作れるわけじゃねーからな
第三者のニーズに応えるためにあれやこれやたられば機能を拡張しなければならない

こっちが「こういうプログラムなんでデータや形式はそれに合わせてください!」というなら楽なんだけどなwwww
0225デフォルトの名無しさん2011/06/30(木) 16:22:38.92
hoge.txt
りんご
みかん
ぱいなぽ
ばなな  ←最終行
-------

このテキストファイルを読み込んで配列データに格納して出力をする処理です
int i;
i=0;
while(!fin.eof())
{
fin.getline(data[i].[40],30);
i++;
}
fin.close();

4行目の『ばなな』まで配列も0〜3に綺麗に入っています
ですが配列[4]に改行(?)データが入るのか、隙間が出来てしまいます
どうすれば空データ(改行?)を回避できるのでしょう
0226デフォルトの名無しさん2011/06/30(木) 16:24:53.33
んな基本的なことを聞いてしまうなら本を1冊買いなさい
0227デフォルトの名無しさん2011/06/30(木) 16:26:51.15
i++のタイミングと条件判定
0228デフォルトの名無しさん2011/06/30(木) 17:22:31.65
0の場合であっても0xとかつけたほうがいいのですか?
0229デフォルトの名無しさん2011/06/30(木) 17:25:30.08
>>228
別にいらないけど付けたほうが分かりやすいっておもったら付けてもいいんじゃないかな
0230デフォルトの名無しさん2011/07/01(金) 03:16:06.50
0-9のcharをint変換したいのですが、どうすればいいのでしょう?

今は-'0'で擬似的に数字扱いにして文字のまま計算しています
(あいにく0〜9までの範囲しか使わない値なので)
0231デフォルトの名無しさん2011/07/01(金) 03:20:26.37
>>230
それでいいよ
それが一般的
0232デフォルトの名無しさん2011/07/01(金) 09:00:57.09
文字コード依存だから正解はないよ
0233デフォルトの名無しさん2011/07/01(金) 09:05:31.18
atoiで
0234デフォルトの名無しさん2011/07/01(金) 09:06:11.26
わざわざ文字列用のバッファ用意するのか
0235 忍法帖【Lv=14,xxxPT】 2011/07/01(金) 10:46:42.23
>>234
要らないよ。
--
int val;
sscanf("5", "%1d", & val);
0236天使 ◆uL5esZLBSE 2011/07/01(金) 11:43:40.31
>>222
ハッァァァァァァア????
0237デフォルトの名無しさん2011/07/01(金) 12:00:09.69
>>235
文字列になってるじゃねーかwwww
なにが「要らないよ」だよww

char型に入った文字の変換の話だよ?
0238デフォルトの名無しさん2011/07/01(金) 12:20:59.66
>>237
だから要らないんだって。
char foo = '5';
sscanf(& foo, 以下略
応用が利かない奴はこれだから……
0239デフォルトの名無しさん2011/07/01(金) 12:24:16.83
>>238
・・・・・・教科書やり直してこいよ
0240デフォルトの名無しさん2011/07/01(金) 12:34:32.25
>>239
何が不満なのか知らんが、自分の浅墓さを省みることもたまにはしてみたら?
http://ideone.com/BmHgi
0241デフォルトの名無しさん2011/07/01(金) 12:40:48.18
>>238
それは応用というより標準ライブラリの実装依存の邪道だろ。
0242デフォルトの名無しさん2011/07/01(金) 12:47:50.66
>>240
動いたから正しいとか
Cでは通用しないんだよ
0243デフォルトの名無しさん2011/07/01(金) 13:17:50.91
>>241-242
邪道で正しくないと言う根拠をたのむ。
0244デフォルトの名無しさん2011/07/01(金) 13:21:49.42
>>243
頭悪すぎ
0245デフォルトの名無しさん2011/07/01(金) 13:41:54.67
問題があると言ってる人は
%1dの意味が分かってないんじゃないの?
0246デフォルトの名無しさん2011/07/01(金) 13:52:47.63
>>245
頭悪すぎ
0247デフォルトの名無しさん2011/07/01(金) 13:59:36.37
sscanfの第一引数はnull terminatedじゃないとダメと思い込んでたが、
よく考えたら仕様で確認したこと無かった

誰か詳しい人教えて
0248デフォルトの名無しさん2011/07/01(金) 14:01:54.42
scanfが悪者なんじゃなくて、
フォーマットの指示を正確にできてないプログラマが悪い、
っていう話をなぜか連想した。
0249デフォルトの名無しさん2011/07/01(金) 14:25:02.38
とはいえ、
「仕様見に行かないと正しいか微妙」
な書きかたは避けたほうが無難では?
まあ勉強のため、というのはアリだが
「こんなことも出来るんだぜ?俺スゲー!」
はやはり有害な思考かなと思う
0250天使 ◆uL5esZLBSE 2011/07/01(金) 18:55:53.44
だからCとか触ってる奴がバカだっていってんのに

ほんとこのスレにいる分際のゴミ同士なかよくやってろよ
0251デフォルトの名無しさん2011/07/01(金) 19:00:08.01
なんだその負け惜しみは。
0252デフォルトの名無しさん2011/07/01(金) 19:23:42.42
uyが おきあがり
なかまに なりたそうに こちらをみている!
なかまに してあげますか?
0253 忍法帖【Lv=15,xxxPT】 2011/07/01(金) 19:30:32.12
イア 御免蒙る
0254天使 ◆uL5esZLBSE 2011/07/01(金) 19:33:35.67
>>251
まさかC++使える自分SUGEEみたいな?

そっかwwwwwwwwwwww っじゃwwwww一生C++やってろよwwwwwwwwwwwwwwww
0255デフォルトの名無しさん2011/07/01(金) 19:39:38.65
>>254
え? もしかしてC++使えないのがコンプレックスなの?
0256天使 ◆uL5esZLBSE 2011/07/01(金) 20:02:49.20
C++バカは効率の悪さにいつまでたっても気づけナイ
C++バカって言葉いいな 今度からそうよぼう
だってバカの一つ覚えみたいなもんだし
0257デフォルトの名無しさん2011/07/01(金) 20:47:28.19
プログラムの実行時間と開発期間を交換するのがC/C++
0258デフォルトの名無しさん2011/07/01(金) 23:07:19.50
>>256
ライブラリ多いじゃん
0259デフォルトの名無しさん2011/07/01(金) 23:20:13.05
あらゆるプログラミングパラダイムを
プロセッサ時間メモリ空間で最善になるようにかける言語
その次に大規模開発 最後に手軽さ
0260デフォルトの名無しさん2011/07/01(金) 23:25:23.04
>>230-232
Cでは'0'から'9'が連続していることが保証されているべえ?
0261デフォルトの名無しさん2011/07/01(金) 23:29:04.98
C/C++ではA〜Zなんかは連続していることは保障されてないが、
0~9については保証されてるな
0262デフォルトの名無しさん2011/07/01(金) 23:30:07.09
>>260
>>232が馬鹿なだけだから気にすんな
0263天使 ◆uL5esZLBSE 2011/07/02(土) 00:03:01.26

ライブラリ多いじゃん (キリッ

本気でC++なんだね^^;
一生やっててください
0264デフォルトの名無しさん2011/07/02(土) 04:04:59.14
yasai.txt
キャベツ,100,10,
じゃがいも,120,20,
もろへいや,200,12,


for(i=0;i<3;i++){
fin.getline(name[i], 20 , ',');
fin.getline(kakaku[i], 20 , ',');
fin.getline(kazu[i], 20 , ',');
}

このような感じに組むと2行目以降頭に”.”ピリオドが追加されます。
キャベツ,100,10,
.じゃがいも,120,20,
.もろへいや,200,12,

恐らくこういう処理になっている
キャベツ,100,10,[]
じゃがいも,
↓
[]じゃがいも

getlineで改行コード判定をしていても、改行コードは取り込んでいる?という理解ですが
どうすれば改行コードを排除して2行目以降の先頭の文字列を読み取れるのでしょうか?
0265デフォルトの名無しさん2011/07/02(土) 06:19:02.59
>>263
「キリッ」って。
茶化してるってことは、痛いところつかれて反論できないってことか。
0266 忍法帖【Lv=15,xxxPT】 2011/07/02(土) 08:35:28.23
>>264
kazu[]は本来数値だろ。カンマで切らず行末まで読んでatoi()すればいい。
0267デフォルトの名無しさん2011/07/02(土) 09:32:20.68
配列のシフト移動(?)って可能なんでしょうか?

int hoge[5]={1,2,3,4,5}
を
hoge[5]={2,3,4,5,0}
や
hoge[5]={0,1,2,3,4,}

というプログラム
0268デフォルトの名無しさん2011/07/02(土) 09:50:32.99
無理
自分でいちいち代入するしかない
0269デフォルトの名無しさん2011/07/02(土) 11:04:55.96
int fuge[14]={0,0,0,0,1,2,3,4};

int (*hoge)[5];=(int(*)[5])&fuga[4];
0270デフォルトの名無しさん2011/07/02(土) 11:11:27.33
char a[4]={'a','a','a','a'};
char b[4]="aaaa";

配列aは問題ないのに、配列bは配列数を5個用意しろと言われるのはなぜ?

0271デフォルトの名無しさん2011/07/02(土) 11:14:37.89
"aaaa"は
{'a','a','a','a' '\0'}だから
0272天使 ◆uL5esZLBSE 2011/07/02(土) 13:33:23.63
∨∨∨∨∨∨∨∨∨∨
「「「「「「「「「「「「「「 kazu[]は本来数値だろ。カンマで切らず行末まで読んでatoi()すればいい。 」」」」」」」」」」」」」」(キリッッッッ!!キリッッッッ!!!!ッッ!!!!
∧∧∧∧(キリ!

ゴッミゴミだな
0273デフォルトの名無しさん2011/07/02(土) 15:21:35.09
標準というからStringを愛用していているんだが、実は糞ライブラリ?

0274デフォルトの名無しさん2011/07/02(土) 15:24:11.45
節子それ標準やない
0275デフォルトの名無しさん2011/07/02(土) 15:32:32.98
Standard Template Library
なんだから標準だろw

0276デフォルトの名無しさん2011/07/02(土) 15:36:45.85
テンプレート?
0277デフォルトの名無しさん2011/07/02(土) 15:38:11.27
>>276
ばか?
0278デフォルトの名無しさん2011/07/02(土) 15:46:59.89
>>277
0279デフォルトの名無しさん2011/07/02(土) 15:49:11.84
>>275
>>277
String≠string
0280デフォルトの名無しさん2011/07/02(土) 20:05:26.28
main(){
char hoge[50];
}

void strfunc(){
hoge[50]="aiueo"
}

配列の値を変更して、メイン関数に反映させたいのですがどうすればよいでしょう?


void strfunc(char hoge[]){
hoge[50]="aiueo"
}
参照するだけならこの方法で問題ないという事は理解してます
0281デフォルトの名無しさん2011/07/02(土) 20:07:43.88
問題ないわけないだろアホか
0282デフォルトの名無しさん2011/07/02(土) 20:07:44.67
main(){
char hoge[50];
strfunc(hoge);
printf("%s\n", hoge);
}
void strfunc(char hoge[]){
strcpy(hoge, "auieo");
}
0283デフォルトの名無しさん2011/07/03(日) 00:48:13.99
メンバ関数とメソッドの違いって何?
0284デフォルトの名無しさん2011/07/03(日) 01:23:04.93
コンストラクタってオブジェクト呼び出し時に実行されるけど
そのときの引数ってどうやってるの?
0285デフォルトの名無しさん2011/07/03(日) 07:13:51.17
4000バイト未満も文字列データの外部ファイルが4つあるとして

毎回fopenで呼び出して特定のファイルを出力するのと

一番最初にfopenで4データを呼び出して、staticな配列に入れておいて
その配列を使いまわすのではPCの処理的にどちらが良いのでしょう?
0286デフォルトの名無しさん2011/07/03(日) 08:12:03.71
http://ideone.com/oTjlA

途中から計算がおかしくなってしまうのですがどうすれば正しく動きますか?
0287デフォルトの名無しさん2011/07/03(日) 08:36:15.79
オーバーフローって知ってる?
0288 忍法帖【Lv=16,xxxPT】 2011/07/03(日) 09:58:12.18
>>285
出力したいのか入力したいのかどっちなのかと
0289デフォルトの名無しさん2011/07/03(日) 11:10:54.26
>>288
ファイルのデータをプログラム内で利用(出力?)です
0290デフォルトの名無しさん2011/07/03(日) 11:32:18.94
>>285
いまどきのPCなら16Kのデータをメモリ上に保持する事なんて屁でもない。
0291デフォルトの名無しさん2011/07/03(日) 11:34:18.45
そういう話じゃないでしょ
0292デフォルトの名無しさん2011/07/03(日) 11:48:15.02
メモリの話になって今更どのくらい消費しているのかと気になったんだが
ショボいプログラムでも55MBも使っていた・・・・

まっさらでウィンドウを表示させただけでも44MBって
0293デフォルトの名無しさん2011/07/03(日) 11:52:47.18
どうせdebugビルドなんだろ
0294デフォルトの名無しさん2011/07/03(日) 12:18:30.19
>>291
そういう話じゃないならどういう話だよ。
0295デフォルトの名無しさん2011/07/03(日) 12:36:04.05
>>293
C++そのものをよく理解してないけどWin32で作っているのが問題っぽい
Windowプロシージャだっけ?あれでウィンドウを表示すると、それだけで数十MB喰われるって認識でいいのかな

コンソールで適当なのを組んだら動作させたら256kだった
0296デフォルトの名無しさん2011/07/03(日) 12:39:31.43
なわけねーよ
0297デフォルトの名無しさん2011/07/03(日) 14:57:53.03
(作り的に)しょぼいプログラムだから55MBくらいmallocしたんじゃね?
0298大天使 ◆uL5esZLBSE 2011/07/03(日) 16:31:58.71
C,C++のゴミカスさがわかったんならさっさと捨てれば



って何度もいっているのにバカは効率を理解しない
0299デフォルトの名無しさん2011/07/03(日) 16:49:56.60
と、ゴミカスがほざいております
0300デフォルトの名無しさん2011/07/03(日) 17:28:59.99
もう俺がゴミカスでいいから、宗教論争を終わりにしてくれないか
0301デフォルトの名無しさん2011/07/03(日) 17:31:24.92
>>298この人ってどのスレでもあたかも全てが敵であるかのように振舞ってるよね
統合失調症とかいうやつかな?かわいそう
0302デフォルトの名無しさん2011/07/03(日) 18:52:50.23
すみません。
条件で分岐しながら進行して行く、シナリオ的なシステムを作っているのですが、

#define ROOT 12 // 上の処理を並列して12個同時進行
#define ACT 45 // 条件を満たした時に飛ぶ条件セット
#define IF 12 // ACT1個あたりのifの数
#define ORDER 3 // IFを満たした時に実行できる命令は3つだけ
#define VALUESIZE 32 // 命令文が抱える変数や文字列の格納用

BYTE root[ROOT][ACT][IF][ORDER][VALUESIZE]; // 合計622KB

現在こうしてtxtファイルからメモリに受け取って処理をしているのですが、
変数のサイズが気になって、不便な制約が増え、制約を超える為に変な仕様を追加して と悪循環になっています。
大元のデータは100KBすら無く、多くのメモリは無駄 でも使いたい所では足りない という事になっています。
どうすれば無駄なメモリを確保しまくらずに、個数制限をしまくらなくて良いプログラムにできるでしょうか・・?
0303デフォルトの名無しさん2011/07/03(日) 19:04:41.87
mapとか、vectorで良いだろ。

たとえば、int a[1000000];があって、ほとんど不使用なのに確保するの事と同じだろ?

そしたら、出現するデータペアだけ記録したらいい。mapなど。
0304デフォルトの名無しさん2011/07/03(日) 21:41:52.70
>>303
ありがとうございます。vectorも適しているんですね。学習しなおして設計しなおしてみようかと思います。
0305デフォルトの名無しさん2011/07/03(日) 21:46:05.93
(a,b,c)を例えば、100a + 10b + cとしたら一次元配列に入る。
それをSTLのvectorに入れたら、2分探索できる。
mapより省メモリになり得る。
0306デフォルトの名無しさん2011/07/03(日) 21:50:14.92
あほがきた
0307デフォルトの名無しさん2011/07/03(日) 22:02:37.05
bit長を調べるにはどうしたらいいでしょうか。
具体的には1024bitになるまで0をstring型変数に追加していきます。
str = str + "0" みたいな感じです。
0308デフォルトの名無しさん2011/07/03(日) 22:09:00.38
>>305
sortしてからならbinary_search出来るが、mapやsetは内部データ構造が初めから二分木
(大抵赤黒木、実装依存)
0309デフォルトの名無しさん2011/07/03(日) 22:24:55.35
map(a,b,c)=outputより、
vector(x,output) (x=100a + 10b + c)
のほうが省メモリになり得る。
0310デフォルトの名無しさん2011/07/03(日) 22:25:14.04
>>307
size_t len = str.length();
if(len<1024){
str.resize(1024);
std::fill(str.begin()+len, str.begin()+1024, '0');
}
0311デフォルトの名無しさん2011/07/03(日) 22:26:15.33
エロいback_inserter()使おうぜw
0312デフォルトの名無しさん2011/07/03(日) 22:48:34.02
<<310
ありがとうございます。ものすごく参考になりました。
0313大天使 ◆uL5esZLBSE 2011/07/04(月) 06:47:24.15
>>300
宗教論争とかそういう次元の話じゃないじゃん

効率が違いすぎる

まず君、このC,C++が何年前に作られた言語なのか理解しているのか

それすら分からなかったらマジでゴミだぞ



>>265
マジでおまえ理解してないんだ
そうか、じゃあやっぱり一生C++やってろよゴミw

おまえの中ではそれが効率いいんだろ?w

おまえがそう思うんならそうなんだろうwwwwwwおまえんなかではなwwwwww

わかったか?ゴミ
0314デフォルトの名無しさん2011/07/04(月) 08:48:59.35
>>313
では、C++の代用になるお勧めの言語はなんですか?
0315デフォルトの名無しさん2011/07/04(月) 10:37:31.70
だから俺がゴミでいいから、空気を悪くしないでくれんか
0316大天使 ◆uL5esZLBSE 2011/07/04(月) 11:13:15.76
C++しかできない( できてると思ってるだけの実際扱えてないゴミ )

が、多いのがネット上のC++コミュニティだからなぁ

Boostまでいってる奴以外はゴミだよ
0317デフォルトの名無しさん2011/07/04(月) 15:22:53.20
namespace ns
{
class C { };
void f(const C& c)
{}
}

void g()
{
f(ns::C());
}

がコンパイル通るのは仕様通りなのでしょうか。
それともgcc 4.5のバグでしょうか。
0318デフォルトの名無しさん2011/07/04(月) 15:31:59.81
>>317
自己解決しました。
「Argument-dependent name lookup」
っていう言語仕様ですね。
0319デフォルトの名無しさん2011/07/04(月) 16:19:40.64
ADLだな
C++の汚い部分
慣れるしかない
0320デフォルトの名無しさん2011/07/04(月) 21:58:14.42
Visual C++のRuntime 2005、2008、2010を入れようと思っています。

検索した結果、2005 SP1、2008 SP1、2010 SP1を発見しましたが、
ATL版を入れるべき という主張をあちこちで見ました。

同様に検索すると、ATL版も発見できたのですが、
本当にそれでいいのかいまひとつ判断がつきません。

よろしければご教示お願いします。
0321デフォルトの名無しさん2011/07/04(月) 22:14:42.57
多重継承便利すぎ
0322デフォルトの名無しさん2011/07/05(火) 10:47:41.71
そう思っていた時期が僕にも有りました
0323デフォルトの名無しさん2011/07/05(火) 11:38:12.44
そんなあなたにインターフェースと実装を
0324デフォルトの名無しさん2011/07/05(火) 15:45:18.56
doubleをifの条件式==で使いたい

doubleは小数点以下の計算で微妙な誤差が出るっていうけど、
数値が整数のみになるように、整数のみで計算していれば誤差はでないんだろうか?
0325デフォルトの名無しさん2011/07/05(火) 15:53:22.32
ならdouble使うこと自体が無駄だっていう
0326デフォルトの名無しさん2011/07/05(火) 15:57:42.96
>>325
予め確保してある一つの変数を場合によってintとdoubleで使い分けたいんだよ
doubleを注意して扱えばintと同等に比較できるならそうしたい
共用体だと別の名前にしなきゃいけないし
0327デフォルトの名無しさん2011/07/05(火) 16:09:14.68
>>326
intとして扱ってるときもdoubleと同じ方法の比較で、判定できるんじゃないの。
0328デフォルトの名無しさん2011/07/05(火) 16:20:11.88
ある程度デカイ整数になると桁が足りなくて1足しても増えなくなるよ
そこまでは整数と扱って問題ない
0329 忍法帖【Lv=18,xxxPT】 2011/07/05(火) 16:20:14.30
http://ideone.com/5v7rD
0330デフォルトの名無しさん2011/07/05(火) 16:25:38.15
ある程度の桁数なら普通にズレずに使えるってことでいいのかな
i=100.000004とかになると、
if(i==100)に引っかからないような気がして心配だったんだ
ありがとう
0331デフォルトの名無しさん2011/07/05(火) 16:36:06.58
>>330
それだと暗黙的にアップキャストされるから
if((int)i==100)とかでダウンキャストしないとだめ
0332デフォルトの名無しさん2011/07/05(火) 16:38:46.07
>>324 >>330
変数の中に常に整数しか入ってないのか、少数もはいる場合があるのかよくわからん。
0333デフォルトの名無しさん2011/07/05(火) 16:49:30.82
>>331
そうなのか……
でもそれだと今度は99,999996とかの場合に99になってしまいそう

>>332
整数のみの計算をしていても、誤差で少数になってしまう場合もあるのかどうか、ってのが知りたかったんだ
0334デフォルトの名無しさん2011/07/05(火) 16:53:41.52
http://www.kouno.jp/home/c_faq/c14.html#5

実数を比較する方法を常に使っていたら、整数として扱ってても
問題ないんじゃね。
0335デフォルトの名無しさん2011/07/05(火) 16:56:20.42
>>333
double に整数つっこんで加減乗を行っても誤差は出ない(一般的な実装なら)
10.000000004とかにはならないの
割り算は説明するまでもない
0336デフォルトの名無しさん2011/07/05(火) 17:03:05.29
>>333
floorしてからキャストでおk
0337デフォルトの名無しさん2011/07/05(火) 17:07:41.70
>>335
それなら何も問題はないや、安心した!
0338デフォルトの名無しさん2011/07/05(火) 21:31:25.74
C++は異なる複数の型が混在する連想配列って作成できるのでしょうか。
mapとかはキー値とバリュー値の宣言をしなきゃいけないみたいですし。
0339デフォルトの名無しさん2011/07/05(火) 21:37:59.47
boost::anyでも突っ込んだら
0340デフォルトの名無しさん2011/07/05(火) 21:38:16.12
>>338
boost.any
0341デフォルトの名無しさん2011/07/05(火) 22:02:00.30
>>339
>>340
ちょっと調べてみましたがCで言うvoid型みたいなものっぽいですね。
テストプログラム書いてみます。ありがとう。
0342デフォルトの名無しさん2011/07/06(水) 07:15:52.41
C/C++上でアクターモデルを実装する方法はありますか
0343デフォルトの名無しさん2011/07/06(水) 08:16:07.48
>>342
http://theron.ashtonmason.net/
http://code.google.com/p/libactor/
0344デフォルトの名無しさん2011/07/06(水) 08:32:34.27
配列操作で

int b[5]={3,4,5,6,7}
int a[2]={1,2}
int ab[10];

から

ab[10]={3,4,5,6,7,1,2} //残りは空

といった感じに配列単位で詰め込む事はできないでしょうか?

1つずつ取り出して、1つずつ入れるしか無い・・・?

0345デフォルトの名無しさん2011/07/06(水) 08:52:48.28
memset(ab, 0, sizeof ab);
memcpy(ab, b, sizeof b);
memcpy(ab + sizeof b / sizeof *b, a, sizeof a);
0346デフォルトの名無しさん2011/07/06(水) 09:00:33.09
>>343
すごい。やっぱ知ってる人は知ってるんだな。
これって副作用については自己責任なのかな。読んでみます。
ありがとう。
0347デフォルトの名無しさん2011/07/06(水) 09:47:58.59
>>346
知ってるのはオレじゃなくてgoogle先生。
0348デフォルトの名無しさん2011/07/06(水) 09:50:56.93
googleはなんでも知っている。そう、あなたの尻の穴のシワの数まで
0349天使 ◆uL5esZLBSE 2011/07/06(水) 10:20:22.27
これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような
そんな言語使ってる奴ってどうみてもゴミだと思うんだけど

もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの?
そうか、二度と話かけんなよ


ゴミだな
0350デフォルトの名無しさん2011/07/06(水) 22:39:38.53
sinxとcosxが分かってる状況でxが分かる関数ありませんか?

画像が移動する向きに向かせたいのに、加速度・速度をx,yに分解したら画像の段階にきてしょんぼりだった…
0351デフォルトの名無しさん2011/07/06(水) 22:41:22.60
逆三角関数でぐぐれ
逆関数自体は高3あたりの内容だろ
0352デフォルトの名無しさん2011/07/06(水) 22:57:38.07
>>350
asin,acos
0353デフォルトの名無しさん2011/07/06(水) 23:15:41.77
義務教育じゃないし仕方ないよね
0354デフォルトの名無しさん2011/07/06(水) 23:33:21.60
>>351-353
ああ、逆関数…そうか
arcsin arccosは習ってなくともちょうど高3で逆関数は習ってたところだった
逆関数の意味をもうちょっと深く考えるべきだった、感謝です
0355デフォルトの名無しさん2011/07/07(木) 22:16:52.28
クラス名やメンバ関数は頭文字は大文字で書く習慣でもあるの?
0356デフォルトの名無しさん2011/07/07(木) 22:25:48.47
慣習?
0357デフォルトの名無しさん2011/07/07(木) 22:31:21.30
>>356
ああそうです
最初規則と書いていたけど
違うなと思って書き直しても間違ってた
0358デフォルトの名無しさん2011/07/07(木) 22:55:11.89
統一感あったほうが気持ちいいし間違えにくいから
同じライブラリやプロジェクトとかでは揃える
仲間内での約束みたいなもん
0359デフォルトの名無しさん2011/07/07(木) 23:13:51.69
int b[5];
これをたとえばb[2]を削除してそれ以降のを詰めていくにはどうしたらいいですか?
本当はint型じゃなくて自分で定義したクラスです
0360デフォルトの名無しさん2011/07/07(木) 23:19:45.87
swap(b[2],b[3]);
swap(b[3],b[4]);
0361デフォルトの名無しさん2011/07/07(木) 23:24:12.35
>>355
キャメルとかパスカルとかスネークとかでググれ
0362デフォルトの名無しさん2011/07/08(金) 08:55:51.11
swap...
こうやって糞コードが増えていくんだな
0363デフォルトの名無しさん2011/07/08(金) 12:42:55.30
すみません。
SubCommon.hに書いた構造体の宣言 struct DATAPACK { int t; };
これを
DataManage.hで #include "SubCommon.h"してから
struct DATAPACK datapack_A; と実体を作ろうとすると、定義されていないと警告が出ます。

不可解な事にほぼ同じ事を別の2組のヘッダーで行うと問題なく実体が作れるのに
なぜ未定義となってしまうのでしょうか?
うっすらでも思い当たる事が有ればご指摘頂けますと幸いです。
0364デフォルトの名無しさん2011/07/08(金) 12:44:40.67
当たり前だのクラッカー
0365デフォルトの名無しさん2011/07/08(金) 12:57:37.65
>>363
実はインクルードされてないのでは?
インクルードガードが邪魔してるとか。
03663632011/07/08(金) 14:04:46.92
>>365
あー・・多重インクルード防止によって展開がされていないんですね・・。ありがとうございました。
0367デフォルトの名無しさん2011/07/09(土) 11:08:08.90
Cというか、プログラムの基本中の基本の質問だけど
10より↑か↓かの処理で

if(i<10){
10未満だよ;
}
if(i>10){
10以上だよ;
}

と

if(i<10){
10未満だよ;
}
else{
10以上だよ;
}

前者は以下のチェック→以上のチェック。
後者は以下のチェック→それ以外ならの処理

どちらも同じ動きをしてくれると思うのですが、条件は2分岐の時
ifを2つとif、else。どちらが処理が早いのでしょう?
イメージ的にはifが2つのが理解しやすいのですが、if文=処理が重いという先入観がありまして

処理速度はelseとifで大きく変わるものですか?


0368デフォルトの名無しさん2011/07/09(土) 11:11:39.67
>>367
かわらない
0369デフォルトの名無しさん2011/07/09(土) 11:12:25.68
そんな差はどうでもいい
0370デフォルトの名無しさん2011/07/09(土) 11:15:27.85
無意味に速度を気にしだした初心者の臭いがする

余程のことが無い限り、速度の為にわけの分からない表記にはしるのはよせ
そしてそれをやるなら実測結果とかに基づいて行え


03713672011/07/09(土) 11:22:52.93
>>370
>無意味に速度を気にしだした初心者の臭いがする
まさにその状況に陥ったので質問しました

わかりやすさ重視にしておきます
0372デフォルトの名無しさん2011/07/09(土) 11:25:07.37
>>371
プログラマとしてやっていくなら、死ぬまで有効な格言を教えよう。
KISS。これはどこまでいっても役に立つ。
0373デフォルトの名無しさん2011/07/09(土) 11:25:22.83
80:20規則は小学校で必修にするべきだと思う
そうすれば日本人もくだらない無意味な節電なんてやめられる
0374デフォルトの名無しさん2011/07/09(土) 11:27:35.33
>>373
誤爆?
次からは気をつけろよ
0375デフォルトの名無しさん2011/07/09(土) 11:40:08.72
>>374
すみませんでした
0376デフォルトの名無しさん2011/07/09(土) 11:45:29.67
>>375
反省したなら腹切って死ねカス
0377デフォルトの名無しさん2011/07/09(土) 11:48:10.26
>>376
それは嫌ですが
このあたりで止めにしましょう
この話題はこれで終了ということで
0378デフォルトの名無しさん2011/07/09(土) 11:50:02.97
ポインタ、配列関連の質問なのですが、

#include<stdio.h>

void main()
{
int i;
char a[20];
for (i=0;i<=9;i++) {
scanf("%c%*c",&a[i]);
a[i+1]='\0';
printf("%s\n",&a);

}
}

これのchar型配列をNULLで初期化する意味を教えてください。
0379デフォルトの名無しさん2011/07/09(土) 11:50:16.79
        ____
    .   /     \
      /   _ノ '' ⌒\    
    /    (● ) (● ) \
    |    :::::⌒,  ゝ ⌒::::|       そんなカリカリすんなよ まったく
     \      `ー=-'  /
 ⊂⌒ヽ/           ヽ /⌒つ
   \ ヽ  /       ヽ    /
    \_,,ノ        |、_ノ
0380デフォルトの名無しさん2011/07/09(土) 11:51:33.39
>>377
あ?逃げてんじゃねーよ
切腹だ切腹。はやくしろ
みんないつもお前には迷惑してんだよ
0381デフォルトの名無しさん2011/07/09(土) 11:52:31.38
>>378
>char型配列をNULLで初期化する
この表現がよく分からないな、詳しくたのむ
0382デフォルトの名無しさん2011/07/09(土) 11:54:42.09
> printf("%s\n",&a);
おかしくねーか?
0383デフォルトの名無しさん2011/07/09(土) 11:56:55.43
printf("%s\n",a);
こっちやな
0384デフォルトの名無しさん2011/07/09(土) 12:40:20.07
>>367 >>371
わかりやすさ重視ってif二つを採用するんじゃないだろうな。

if二つのほうは、二つの条件を見比べて、かつ最初のifの中でiが変化してないって
確認しないと排他条件になってるって理解できないからわかりにくいぞ。
0385 忍法帖【Lv=21,xxxPT】 2011/07/09(土) 13:01:43.61
つーか、iが10のときの振る舞いが違ってしまっている。「以上」なら>=にしないと。
0386デフォルトの名無しさん2011/07/09(土) 15:10:28.61
>>384
2つの条件以上増えないと確定しているならif2つよりelseのが分かりやすいが
暫定的であって今後条件が3つ4つと増える可能性があるプログラムなら、ifを2つにしておいたほうが拡張しやすくね?
0387デフォルトの名無しさん2011/07/09(土) 15:23:12.56
if (cond) {
…
} else {
…
}
を

if (cond) {
…
}
if (!cond) {
…
}
と書くのはちょっとないわ。
0388デフォルトの名無しさん2011/07/09(土) 16:31:58.47
>>387
上と下では意味が違う場合がある
0389デフォルトの名無しさん2011/07/09(土) 16:58:55.33
同じ変数使いまわすときとか?
0390デフォルトの名無しさん2011/07/09(土) 17:32:29.56
if(a==b) { doSomething1(); }
else if(a>b) { doSomething2(); }
else { doSomething3(); }

この対称性の無さがイラつくから
if(a==b)
0391デフォルトの名無しさん2011/07/09(土) 17:34:01.66
{ doSomething1(); return; }
if(a>b) { doSomething2(); return; }
if(a<b) { doSomething3(); return; }
って書いちゃう
0392デフォルトの名無しさん2011/07/09(土) 17:38:16.83
>>387は、上はTRUEの時フラグを書き換えてもelse以下は実行されない、
下はTRUE内でフラグを書き換えるとそれ以降の文が実行される可能性がある

どっちも使っても問題ない書き方だけど、実行結果として差が出たりするし意味合いが違うから、
ifとelseの代わりに使うものではないなぁ
0393デフォルトの名無しさん2011/07/09(土) 18:42:46.41
クラスによっちゃ!だって無視できるコストにならないかもしれない
だから書かなくて済むなら極力書かないほうが良い
0394デフォルトの名無しさん2011/07/09(土) 18:47:13.88
どうしても書きたいなら else if で書けばよいのですね
わかりました
ありがとうございます
0395デフォルトの名無しさん2011/07/09(土) 21:24:47.06
そして無視される385w
そこは本当に大丈夫か?
0396デフォルトの名無しさん2011/07/09(土) 22:16:46.90
些細なことで揚げ足を取るの二夢中になって本質の議論をおろそかにする。バカの典型例ですよね
0397デフォルトの名無しさん2011/07/09(土) 23:27:36.76
memo.txt
aa,10,12,10,
bb,11,22,20,
cc,22,10,11

char hozon[30][3];

ifstream file("memo.txt")

while(file.eof)
{
file.getline(str,sizeof(str), ',');
hozon[i]=str;
i++;
}

テキストから文字列を読み取って、それを配列に格納する処理をしたいのですが
改行まで行くとそこから先に進みません

どうすればよいのでしょうか?
0398デフォルトの名無しさん2011/07/09(土) 23:41:58.12
>>397
< while(file.eof) {
< file.getline(str,sizeof(str), ',');
---
> while(file.getline(str,sizeof(str), ',') !=file.eof) {
0399デフォルトの名無しさん2011/07/10(日) 11:07:03.21
int a[10];
a[5]=1;
a[3]=9;

int a[10000];
a[500]=1;
a[300]=9;

データの処理速度やメモリの使用量に違いってあるんですか?

試しにa[10000]みたいな宣言をしたけど処理がガクっと落ちたり、消費メモリ量が跳ね上がったりする事はなかったもので
0400デフォルトの名無しさん2011/07/10(日) 11:18:01.72
>>399
実際どういう処理を記述したのかが分からないから確かなことは言えないんだが
仮想メモリという仕組みがあるので、大きな配列を確保しても確保しただけじゃタスクマネージャ等から確認するようなメモリ消費量は増えないことがある

もしくはint a[10000]で跳ね上がらないとか言ってるから
それが通常40KBほどでしか無いほどを理解してないとか
0401デフォルトの名無しさん2011/07/10(日) 11:20:27.03
仮想メモリじゃなくて仮想記憶とか仮想アドレスだ
仮想メモリじゃOSのメモリ内容退避する機能ばっかでてくるわ
0402デフォルトの名無しさん2011/07/10(日) 11:28:33.27
>>400
どもです。参考になりました
0403デフォルトの名無しさん2011/07/10(日) 12:18:48.39
>>399
大きな多次元配列を用意して
下位の次元を内側にしたループ
上位の次元を内側にしたループ
これを比較してみると全然速度が違うことがわかるよ
0404デフォルトの名無しさん2011/07/10(日) 12:19:57.36
>>403
当たり前だ
0405デフォルトの名無しさん2011/07/10(日) 12:46:22.30
つか>>367って同じコードじゃないよね
i=10で死ぬ
0406デフォルトの名無しさん2011/07/10(日) 12:48:52.42
>>405
つかそれって既出だよね
0407デフォルトの名無しさん2011/07/10(日) 12:52:26.55
どうでもいい
0408デフォルトの名無しさん2011/07/10(日) 12:53:24.71
駄プログラマに多いよね
本質を理解できず、重箱の墨についてひたすら気にする奴って

367の要件から
10の判定が重要で、それについてあれこれ会議するのか
10の判定は仮定のデータであり実際にはどうでもよくて、ifの処理速度が要件の肝であるか


0409デフォルトの名無しさん2011/07/10(日) 13:27:14.38
そうして上級プログラマー様は後々何故そうなっているのかが分からなくて保守できなくなるコードを書かれる訳で。
0410デフォルトの名無しさん2011/07/10(日) 13:36:26.15
例え話の例えにツッコミを入れ続ける馬鹿は
駄、上級プログラマー関係ない

;が無い。スペルが間違っている。()が足りない。
こういう奴は根本的に一緒に仕事したくないw
0411デフォルトの名無しさん2011/07/10(日) 13:37:59.26
なんで仕事前提なの?
仕事でプログラム書かなきゃいけない人は好き好んでこんな所見てないでしょ
ちなみに俺は趣味グラマ
0412デフォルトの名無しさん2011/07/10(日) 13:42:37.13
>>411
保守
仕事
趣味

レスのルーチンを理解出来てないな
プログラムより日本語を勉強した方が良いな
0413デフォルトの名無しさん2011/07/10(日) 13:45:53.60
趣味で保守をする趣味グラマさんって・・・
0414デフォルトの名無しさん2011/07/10(日) 14:03:07.79
半角スペース区切りのファイルから読み取って
クラス内の変数に次々代入ってどうやるの?
0415デフォルトの名無しさん2011/07/10(日) 14:04:42.41
羅列できないから無理だよ
0416デフォルトの名無しさん2011/07/10(日) 14:07:17.89
>>415
そうなんですか
ありがとうございました
0417デフォルトの名無しさん2011/07/10(日) 14:17:51.93
>>414
Luaでやるといいよ
0418デフォルトの名無しさん2011/07/10(日) 15:22:09.65
>>414
ん?普通にやればいいんじゃないかと思ってしまうんだが、
特別な用件でもあるのだろうか?
0419デフォルトの名無しさん2011/07/10(日) 16:18:01.49
scanfで整数の入力をしています
ところが、アルファベットを入力してしまうとバグってしまいます
指定した型以外が入力された場合に、入力に戻ってもう一度入力させるには
どうしたらいいのでしょうか?
0420デフォルトの名無しさん2011/07/10(日) 16:19:07.86
整数かアルファベットか調べてアルファベットならループすればいいよ
0421デフォルトの名無しさん2011/07/10(日) 16:21:12.22
scanfは指定した型以外が入るとキーバッファそのままで
返ってくるから、自分でフラッシュしないとならない
まあscanfは勉強の間だけ使うんだろうから代替を進めたりはしないでおくか
0422デフォルトの名無しさん2011/07/10(日) 17:25:31.51
data.csv
1,谷,40
2,鈴木,32
3,佐藤,170
  ・
  ・
  ・
100,内藤,341

内藤のデータを呼び出す場合、1行ずつ総当たりするしかないですかね?

もしくはデータに規則性を持たせて、1行のデータ量を均一にして
001,谷[][][][][][],040
seekで飛ばすというのも有効なんですが?(思い浮かんだだけで実際には組んでいません)

データベース等大掛かりなものでなく、プログラムで簡単に操作できるのか
簡単にすませるつもりなら、データを整えた方が圧倒的に楽なのか
意見を〜
0423デフォルトの名無しさん2011/07/10(日) 17:31:20.83
そりゃ1行ずつだね。
全部いっぺんに読んで内部で配列やリスト、ハッシュにしておくこともあるけど。
DB覚えると何でもDBに入れたくなるよ
0424デフォルトの名無しさん2011/07/10(日) 17:49:17.54
DBは遅い。
0425デフォルトの名無しさん2011/07/10(日) 17:54:49.53

インメモリデータベースvsC++標準ライブラリコンテナ

インメモリデータベースのコードは、前回最速だったCase5を使用します。

測定結果は以下のようになりました。

http://www.sutosoft.com/room/archives/images/20070127_graph1.png
http://www.sutosoft.com/room/archives/000482.html

0426デフォルトの名無しさん2011/07/10(日) 18:04:09.27
遅くても手軽に済ませたいならSqliteつかえ。
データ格納方法とかを自作する必要がなくなる。
0427デフォルトの名無しさん2011/07/10(日) 18:07:11.94
>>422
たとえばcsvが一ギガでメモリに全部載せるのが難しい場合は、
全文検索のようにしたらいい。
0428デフォルトの名無しさん2011/07/10(日) 18:41:18.80
>>425
大規模なデータベースでなく、CSVに毛が生えた程度の小規模のデータ郡を扱うなら
STLのLISTを駆使しろって事なのかな?
0429デフォルトの名無しさん2011/07/10(日) 18:56:42.91
>>428
速いっていってもこれ要素追加のみの話、どっち使うべきというほどの結論にはつなげられないんじゃないかな
せいぜいDBめちゃめちゃ遅いと思ってる人に、そうでもないよって言えるぐらいの意味しかないんじゃない?
0430デフォルトの名無しさん2011/07/10(日) 19:09:28.42
>>429
DB最速のメモリベースとの比較。普通のファイルにしたら遙かに遅い。
0431デフォルトの名無しさん2011/07/10(日) 19:13:40.55
DBって言えば、ソートがよくわからない

1次元配列的なソート関数ならわかるけど、多次元配列のソートになるとよくわからない

 キー  品名      価格   在庫数  品名は数値で表す
 1    1(きゃべつ)  200    1000
 2    2(レタス)   100   2300
 3    4(トマト)    140  3200
 4    3(きゅうり)   142  3000
 5    5(だいこん)   242  3000


こんな配列で
yasai[5][4]={
{1,1,200,1000}
{2,2,100,2300}
{3,4,140,3200}
{4,3,142,3000}
{5,5,242,3000}
}

価格でソートという方法が良くわからない
0432デフォルトの名無しさん2011/07/10(日) 19:14:57.02
>>431
DB、SQLつかえ。
0433デフォルトの名無しさん2011/07/10(日) 19:18:51.90
>>431
boost.multi_index
0434デフォルトの名無しさん2011/07/10(日) 19:20:54.53
スクリプトで動作が遅い、同時アクセスがある場合はデータベースに丸投げしたらいい。
C/C++が扱えるならなるべく工夫しろって事。
0435デフォルトの名無しさん2011/07/10(日) 19:21:39.63
>>430
いやファイル版との比較もあるよ
15倍程度になってる
0436デフォルトの名無しさん2011/07/10(日) 19:23:56.94
>>430
STLのlistと比較するならオンメモリで妥当じゃないのか?
0437デフォルトの名無しさん2011/07/10(日) 20:10:09.43
SQLiteのオンメモリは、使い終わった後で保存できるの?
保存時に別データベースをオープンして全データ流し込むの?
0438デフォルトの名無しさん2011/07/10(日) 21:27:17.87
ゲームのセーブ機能をつくろうとしているのですが
設計をどうしたら良いか悩んでいます

class ISprite
{
0439デフォルトの名無しさん2011/07/10(日) 21:34:18.16
メモリ上の値全部保存しちゃえ
0440デフォルトの名無しさん2011/07/10(日) 21:37:15.57
>>438
【初心者】スレを立てる前にココで質問を【Part23】
http://hibari.2ch.net/test/read.cgi/gamedev/1309450150/
04414382011/07/10(日) 21:50:15.08
Tabキー押しちゃったら間違って書きこんでしまいました・・・

スプライトは種類ごとに32bit整数のタイプIDを持っています。
セーブするときは種類を示す文字列に変換し、
ロードするときは文字列をタイプIDに変換させたいのですが
連想配列2つ用意しておいて、起動時にID、名前、関数ポインタの3つを登録すれば
いいかな、とは思いますが、何だか変な設計のような気がして

・タイプIDから文字列とスプライトを作成する関数のポインタを取得する連想配列
・文字列からタイプIDを取得する連想配列
0442デフォルトの名無しさん2011/07/10(日) 22:04:38.84
>>441
悩んでいる所をつかめているか分からないからボヤっとした回答だが
・boost::serializationとかでシリアライズする
・cvsとかに変換テーブルデータ書いておく
・データが乱雑になってきたらsqliteとかで管理する
とかの方法もあると思うな
0443442 2011/07/10(日) 22:06:45.99
cvsとか何だよ俺バージョン管理システムかよ
csvだよ
0444デフォルトの名無しさん2011/07/10(日) 22:12:41.94
どんなデータを記録したいのかで千差万別。
シムシティと、RPGでは違うだろ。
04454382011/07/10(日) 22:31:38.03
セーブの殆どの部分はyaml-cppでやっています。各クラス固有のデータを保存する部分は出来ていて、
悩んでいる部分は「名前から各クラスのインスタンスを作るときの方式」です。
連想配列じゃなくて、配列使った線形探索ならできそうなのが分かったのでこっちにします・・・
class ISprite
{
E_SPRITE_TYPE getType() const
{
return EST_IMAGE;
}
}

class CSpriteManager
{
void addSpriteType(int type, char* name, FACTORYFUNC_T func)
{
// 種類を追加
Types.push_back(SSpriteType(type, name, func));
}

ISprite* createSprite(const char* name)
{
// 線形探索で一致するものを探す
}

char* getSpriteName(E_SPRITE_TYPE type)
{
// 線形探索で一致するものを探す
}

array<SSpriteType> Types;
}
0446デフォルトの名無しさん2011/07/11(月) 13:03:06.60
とあるサイトで

typedef struct {
char name[256];
int age;
int sex;
} People;

こんな記述を見たのですが、
PeopleのPが大文字になっているのは何か理由があるのでしょうか?
0447デフォルトの名無しさん2011/07/11(月) 13:26:26.99
クラス名は大文字で始めるという、そのページのルールなんだろ。
0448デフォルトの名無しさん2011/07/11(月) 13:35:45.01
>>446
なにか意味を考えるとしたら
ユーザー定義型を区別するため
C++ や Javaでのクラスでの一般的なつけ方を使った
とかかなぁ
0449デフォルトの名無しさん2011/07/11(月) 21:32:27.70
mapを有効利用できるケースを教えてくれませんか?
ペア型(キー,値1)の紐付けじゃ、1次元配列でよくね?と思ってしまうわけで

キー,値1,値2,値3,みたいな運用ができれば重宝したのに
0450デフォルトの名無しさん2011/07/11(月) 21:36:34.03
struct value { val1 v1; val2 v2; val3 v3; } ;
map<key, value> m;


0451デフォルトの名無しさん2011/07/11(月) 21:41:02.96
>>449
むしろそういう使い方の方が一般だと思うよ
04524492011/07/11(月) 21:44:39.50
>>450,451
言われてみれば
2番目を配列にすればよかっただけだった。

どもです
0453デフォルトの名無しさん2011/07/11(月) 21:47:09.49
>>449
vectorを突っ込めば済むだろ
0454デフォルトの名無しさん2011/07/11(月) 22:11:18.81
超初心者だけど
mapって総舐めでアクセスするんだっけ

struct hoge{
int aa;
int bb;
char cc;
int dd[10];
};

hoge datalist[1000];

データ数が変更されないリスト表的なデータなら
構造体の配列要素をキーにしたほうが扱いやすくね?
0455デフォルトの名無しさん2011/07/11(月) 22:24:52.17
std::map<int,boost::tuple<int,char,std::string>>
などという手もあるぞ
0456デフォルトの名無しさん2011/07/11(月) 22:42:28.63
>>454
だいたいは二分木使って実装されてるでしょ
0457デフォルトの名無しさん2011/07/11(月) 23:23:41.99
赤黒木やな大体は
0458デフォルトの名無しさん2011/07/12(火) 02:37:29.13
A*探索って、ダイクストラのコストの小さいノードから確定して接続ノードを展開していってるのを、
現在の「コスト+ゴールまでの予想コスト」の小さいもの。に置き換えた版ってことであってる?
0459デフォルトの名無しさん2011/07/12(火) 20:00:28.48
char a[3][20]
char b[2][20]

a[0]="00"
b[1]="00"

if(a[0] == b[1]){

}

このif文が成立しないのですが何故でしょう?

%sで確認すると 00 と 00 で同じ
%dで確認すると微妙に違う値(220341 220752 みたいな感じ)


atoiで数字に変換してから比較すると  0と0 でif文がちゃんと動作
厳密にはchar配列に直接文字列を書き込んでいるのではなく、代入で”00”を入れているので若干動作が違いますが

%s上は同じ文字列なのに%d(int)で調べると値が異なるというのがわかりません。配列の大きさも同じなのに
0460デフォルトの名無しさん2011/07/12(火) 20:06:30.48
a[0]="00"
b[1]="00"

はスタック上の違う場所に"00"って文字をつくって、そのアドレスを突っ込んでるから。
アドレスが違うので違う。
0461デフォルトの名無しさん2011/07/12(火) 20:12:30.64
>>459
strcmpって知ってる?それがなんの為にあるとおもってんの?
0462デフォルトの名無しさん2011/07/12(火) 20:18:35.54
>>461
知りません。
が、調べたら単純な2つの文字列比較strcmpで対応すれば間違いは無さそうですね

if(strcmp(a[0],b[1])==0)
{
}

で正常に動作しました
0463デフォルトの名無しさん2011/07/12(火) 20:18:53.88
ん。スタック上ってのは嘘だったかも
0464デフォルトの名無しさん2011/07/12(火) 20:22:48.61
それ以前の問題だろ
教科書やり直してこい
この馬鹿にちゃんと指摘してやれよ
説明面倒だから俺はやらんが


0465デフォルトの名無しさん2011/07/12(火) 20:56:32.06
std::stringを知ると幸せになれる人種
0466デフォルトの名無しさん2011/07/12(火) 20:58:05.81
if(a[0][0] == b[1][0])でご期待通りに動く
0467デフォルトの名無しさん2011/07/12(火) 21:00:13.95
てゆーか代入の時点で問題あるだろ
0468デフォルトの名無しさん2011/07/12(火) 21:03:33.51
>>466
え?
0469デフォルトの名無しさん2011/07/12(火) 21:23:03.09
a[0]="00\0";
b[1]="00\0";
こうだよね☆(ゝω・)v
0470デフォルトの名無しさん2011/07/12(火) 21:27:25.77
>>469
馬鹿なの?死ぬの?
0471デフォルトの名無しさん2011/07/12(火) 21:33:28.13
いやー。ネタなのかマジなのか本気で悩むわw
ネタだとしても意味わかんないし(汗
0472デフォルトの名無しさん2011/07/12(火) 21:36:38.09
>>469
の場合\0の後にももう1個\0つくの?
0473デフォルトの名無しさん2011/07/12(火) 21:39:40.31
つくよ
0474デフォルトの名無しさん2011/07/12(火) 21:40:38.58
>>473
さんくす
0475デフォルトの名無しさん2011/07/12(火) 22:12:40.59
すみません。すごく基本的なことではまってるので教えてください。
1 2
3 4
という中身の2行のファイルがあって、標準入力から下記のループで読み込みます。
for(;;) {
int a,b;
if(!cin) {
break;
}
cin >> a >> b;
cout << a << " " << b << endl;
}
すると、下記のように余分に1行出力されるのですが、こういう場合、普通はどう書くのでしょうか?
$ ./hoge.exe < src
1 2
3 4
3 4

環境は cygwin の g++ です。
0476デフォルトの名無しさん2011/07/12(火) 22:21:43.43
これは

int a,b;
for(;;) {
cin >> a >> b; if(!cin) break;
cout << a << " " << b << endl;
}
0477デフォルトの名無しさん2011/07/12(火) 22:23:17.87
cinとかつかったことないから良くわからないが。その出力からしたら>>476でいけるはず。
0478デフォルトの名無しさん2011/07/12(火) 22:25:28.13
>>475
二行目の4がbに入るループの終わりではまだcinに改行が残ってる
その次のループでcinはまだ終端ではないのでif文はスルーされる
cinは失敗するが改行は読み込むというか読み飛ばす
a, bには前のループの値のままなので3 4が出力される
cinはもう終端なので次の周のifでbreakされる
0479デフォルトの名無しさん2011/07/12(火) 22:25:47.20
>>476
>>477
おぉ、いけました。ありがとうございます!
0480デフォルトの名無しさん2011/07/12(火) 22:27:13.63
>>478
ありがとうございます、理解しました
0481デフォルトの名無しさん2011/07/13(水) 02:34:24.55
とある値が変わってなければ前回と同じ結果で良いという関数があったとして

全てのデータの型をstaticにして
最初に前回の数字と同じだったらスキップするという感じのif文で囲ってしまうのと
同じでも毎回同じ処理をさせるのとどちらがよいのでしょう?

根拠は特にないのですが、staticだらけってのはなんかダメというイメージが・・・

処理内容は200個未満の配列要素をifったりforしたり
その結果でちっちゃなファイルからデータを読み取って反映させる程度です
0482デフォルトの名無しさん2011/07/13(水) 02:49:32.04
>>481
staticがよくない理由は
マルチスレッドで対策なしで使うと値が無茶苦茶になることがある
同じ物を代入したのに結果が変わる関数を作れるので、これはあまりよくないとされる
(関数を呼び出した時の引数だけじゃなくて、前回どう呼び出したが関わってしまい面倒といった感じの理由で)

なので、マルチスレッドで使わないというなら
その使い道は別に構わないのではないでしょうか

どっちにすべきかの話をしてるなら内容次第なのでなんとも
0483デフォルトの名無しさん2011/07/13(水) 03:14:32.10
そんなのatomicにすればいいだけの話のような・・・
クリティカルセクションとかmutexとかセマフォとか
0484デフォルトの名無しさん2011/07/13(水) 03:20:09.43
それが対策ってことじゃん・・・・・・
用語だけでも添えておけということか
0485デフォルトの名無しさん2011/07/13(水) 03:21:45.25
いやそうじゃなくてマルチスレッドで対策なしという前提がおかしいって
0486デフォルトの名無しさん2011/07/13(水) 03:53:15.01
>>485
頭大丈夫?
0487デフォルトの名無しさん2011/07/13(水) 04:19:38.07
そちらこそ大丈夫ですか?
0488デフォルトの名無しさん2011/07/13(水) 04:21:29.77
大丈夫です
心配してくれてありがとう
0489デフォルトの名無しさん2011/07/13(水) 05:33:51.31
>>485
お前がアホ
0490デフォルトの名無しさん2011/07/13(水) 08:33:31.76
PGの9割はアホという統計が出てる
0491デフォルトの名無しさん2011/07/13(水) 08:35:42.93
職業プログラマはね
0492デフォルトの名無しさん2011/07/13(水) 08:50:47.86
アマは10割だしな
0493デフォルトの名無しさん2011/07/13(水) 08:58:09.89
アマというか趣味グラマはそうでもないぞ 好きでやってるからな
6割くらいだろう
0494デフォルトの名無しさん2011/07/13(水) 09:10:23.45
もっといい仕事選べばよかったのにね。アホ過ぎる
0495デフォルトの名無しさん2011/07/13(水) 11:31:24.46
日本の職業プログラマ60万人のうち6,7割は、ちょっとできるレベルの
アマプログラマに負けてるレベル。
0496デフォルトの名無しさん2011/07/13(水) 11:34:59.68
重要な産業なのに待遇最悪で教育もてんでダメとか日本終わってるよな
0497デフォルトの名無しさん2011/07/13(水) 14:35:27.87
C流のクラスの配列は非推奨ってあったんだけど何で?
0498デフォルトの名無しさん2011/07/13(水) 20:25:40.53
datalist[4];

  0   1     2   3  4
0001 岩手    100   C エカ
0002 福島    70   E トチト
0003 栃木    60   D サクケ
0004 東京    500  A カカカ
こういう感じの項目が綺麗に整っているデータでなく


0001 岩手   C     エカ  100
0002 福島   E     70   トチト
0003 栃木   サクケ  60   D   
0004 東京    500   A    カカカ
完全ランダムではないが、データの配置が数パターンに分かれているとき
どうやって扱えばいいのでしょう?

案1 if文
3番目が〜だからdatalist[2]でなく[3]に入れる。
といった感じで条件でデータの値を調べつつ読み取る

案2 読み取りリストを用意する
岩手 0,1,3,4,2
福島 0,1,3,2,4
栃木 0,1,4,2,3
東京 0,1,2,3,4
東京だったら、読み取りリストにアクセスして参照しながら取り出す
元データ数と同じ分だけリストを入力しなければならない。

データ数は300以下。パターン数は6前後(データの項目数は勝手に増減しない)
0499デフォルトの名無しさん2011/07/13(水) 20:37:27.68
>>498
例を見る限り、数字、英字、カナで判別出来そうだが。
0500デフォルトの名無しさん2011/07/13(水) 20:42:20.65
>>499
実際にはもう少し横に項目数があり、数字で別データもあるという感じでお願いします
0501デフォルトの名無しさん2011/07/13(水) 20:53:16.92
正規表現
0502 忍法帖【Lv=24,xxxPT】 2011/07/13(水) 21:54:15.40
>>498
その巫山戯た仕様をぶち壊せ。
0503デフォルトの名無しさん2011/07/13(水) 22:21:37.47
よめねえよバカ
読めるように間違えろ!
0504デフォルトの名無しさん2011/07/13(水) 22:28:45.50
>その巫山戯た
どういう文字列を変換したのか予想がつかないw

みざんぎ?
0505デフォルトの名無しさん2011/07/13(水) 22:31:43.83
巫山戯ろ
0506デフォルトの名無しさん2011/07/13(水) 22:32:46.38
御巫山戯(おふざけ)

ふざけんな!って言葉自体良く使うが、漢字の書き方は初めて知ったw
0507デフォルトの名無しさん2011/07/13(水) 22:36:06.15
フザケロ

フザケル

御ふざけ


でないじゃん
0508デフォルトの名無しさん2011/07/14(木) 00:14:12.91
>>507
そんな戯けた辞書を使うのが悪い。
0509デフォルトの名無しさん2011/07/14(木) 00:23:49.37
え、中学生レベルの知識でしょ……
「流石」と同じレベル
0510デフォルトの名無しさん2011/07/14(木) 00:31:55.99
mapで配列、または構造体の使い方がわかりません

int Numdata[10]={1,20,30,40,500,6000,700,800,9,}
struct Kouzo{
int a;
int b;
char c;
char d[10];
};
struct Kouzo Kouzoutai[5];

main{
using namespace std;

//その1
map<int ,int[]> map1;
map1.insert( map<int, int[]>::value_type( 1, ??) );

//その2
map<int ,vector<int>> map1;
map1.insert( map<int, vector<int>>::value_type( 1, ??) );

//その3
map<int ,struct Kouzoutai> map1;
map1.insert( map<int, struct Kouzoutai>::value_type( 1, ??) );

//その4
map<int ,struct Kouzoutai[]> map1;
map1.insert( map<int, struct Kouzoutai[]>::value_type( 1, ??) );
}

配列や構造体のデータをどうやってinsertすればいいんでしょ?
0511デフォルトの名無しさん2011/07/14(木) 00:35:43.16
std::pairって知ってる?
0512デフォルトの名無しさん2011/07/14(木) 00:47:58.43
>>511
mapの使い方が理解できました

0513 忍法帖【Lv=24,xxxPT】 2011/07/14(木) 00:54:04.90
>>510
map1[1] = Numdata;
map2[1] = vector<int>(Numdata, Numdata + 10);
0514デフォルトの名無しさん2011/07/14(木) 04:12:49.14
mapで配列や構造体を使うならコピーコンストラクタの書き方と参照カウンターを覚えようぜ。
0515デフォルトの名無しさん2011/07/14(木) 09:20:09.47
なぜここで参照カウンタ?
0516デフォルトの名無しさん2011/07/14(木) 13:31:27.39
二乗三乗の指数計算をPOW(だっけ?)を使わず
int型のまま処理する方法ってありませんか?

for(i=0;i<4;i++)
{
5x10^i
}
0517デフォルトの名無しさん2011/07/14(木) 13:40:53.05
ループすればいいじゃん
0518デフォルトの名無しさん2011/07/14(木) 14:02:08.67
int ipow(int a, int n) {
 if(n==1) { return a; }
 if(n==0) { return 1; }
 return a * ipow( a, n-1);
}
0519デフォルトの名無しさん2011/07/14(木) 14:17:17.49
>>518
再帰を使って自作の指数関数ってわけですね

再帰って処理を追う事はできても、自分で有効活用できないんだよな・・・
0520デフォルトの名無しさん2011/07/14(木) 14:25:33.55
まあ無理に使わなくてもほとんどループで何とかなるしな
0521デフォルトの名無しさん2011/07/14(木) 14:28:40.03
処理速度も変わらない(下手すりゃ遅くなる)からな


でもコードをシンプルにできたりすると「スゲー」と思う
分かり難くなる場合もあるけどw
0522デフォルトの名無しさん2011/07/14(木) 15:24:13.60
末尾再帰は、コンパイラによってはループに最適化される。
0523デフォルトの名無しさん2011/07/14(木) 15:35:43.35
PSGのような電子音をC++で作って制御したいのだけど
どこか参考になるサイトはありますか?
0524デフォルトの名無しさん2011/07/14(木) 15:43:38.83
それはコンパイラによるだろ。
return a * func();
をループにするのは
return func();
をループにするのとでは訳が違うぞ。
前者は中間コード上は
tmp1 = func()
tmp2 = a * tmp1
return tmp2;
となり、単純な末尾再帰として解決できない。
そこまでコンパイラががんばるかどうかは調べないとなんとも言えんよ。
gccとかvsはやってくれるとは思うけど。
0525デフォルトの名無しさん2011/07/14(木) 15:53:13.15
>>523
AY-3-8910などを繋いで制御するって事?
0526デフォルトの名無しさん2011/07/14(木) 16:05:20.10
>>525
あ、違います。効果音をプログラム内で賄いたいなと。
0527デフォルトの名無しさん2011/07/14(木) 16:07:10.32
さすがに音は環境依存なので、環境わからんと・・・
0528デフォルトの名無しさん2011/07/14(木) 16:14:00.69
環境かー難しそうですね。
ちょっと調べてみます
0529デフォルトの名無しさん2011/07/14(木) 16:21:11.15
だめだこりゃ
0530デフォルトの名無しさん2011/07/14(木) 17:21:25.84
#include <windows.h>

void main(void)
{
::Beep(3000, 500);
::Sleep(200);
::Beep(4000, 200);
::Sleep(200);
::Beep(4000, 200);
}
ネットで見つけました。
周波数や長さを独自で調節するにはどうすればいいのかわからない。
windowsです。
0531デフォルトの名無しさん2011/07/14(木) 17:45:11.70
そこまで見つければ、ググればいいんじゃね?

よーわからんけどこれでいいんじゃねーの?
ttp://msdn.microsoft.com/ja-jp/library/cc428923.aspx
0532デフォルトの名無しさん2011/07/14(木) 17:56:25.09
PSGを叩くとかじゃなくて波形作るんなら、
それなりのライブラリ利用してはどうかな。

サウンドプログラミング5
http://hibari.2ch.net/test/read.cgi/tech/1231649001/
こういうスレもあるし、、最初は眺めるだけにしたほうがいいが。

まあ最初はBeepで遊んでもいいけどね。
0533デフォルトの名無しさん2011/07/14(木) 18:16:53.58
>>531>>532
ありがトン。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi
ここの
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100081.txt
を解読してたのですがわけわかめですた。素直にBeep使うことにします。

0534デフォルトの名無しさん2011/07/14(木) 21:05:30.40
Cで出来てC で出来ないことってありますか?
0535デフォルトの名無しさん2011/07/14(木) 21:07:18.19
すみません、なんかプラスが消えました
「Cで出来てCぷらすぷらすで出来ないことってありますか」です
0536デフォルトの名無しさん2011/07/14(木) 21:19:54.00
テスト C++
0537デフォルトの名無しさん2011/07/14(木) 21:19:54.42
こういう初期化
int a[100] = {
[1] = 10,
[2] = 100
};
struct {
int x;
char b;
} = {
.b = 'c'
};

void *から他のポインターへの暗黙変換
void *a;
char *b = a; <= C++ではエラー
0538デフォルトの名無しさん2011/07/14(木) 21:27:32.05
>>537
Cだとその初期化ができるのか〜

それができず、今から覚えるならC#のが楽だろ?と思っているぐらい。
C#は触ったことないけどww
0539デフォルトの名無しさん2011/07/14(木) 21:34:48.39
それはCであってCじゃないけどな
0540デフォルトの名無しさん2011/07/14(木) 21:37:58.60
C++0xにはC99のdesignated initializersは入らないんだよな
0541デフォルトの名無しさん2011/07/14(木) 22:35:31.69
>>537
変数名が抜けてた。意味は通っただろうけど。

struct {
int x;
char b;
} a = {
.b = 'c'
};
0542デフォルトの名無しさん2011/07/15(金) 09:07:41.47
designated initializer は初めて見たとき、次のような定義

void foo (int a, int b) {printf("%d,%d\n", a, b);}
struct foo_args {
    int a;
    int b;
};
void _foo (struct foo_args *args) {foo(args->a, args->b);}
#define foo(...) _foo(&(struct foo_args){__VA_ARGS__})

を使ってキーワード引数もどきが出来るな、と思った

func(.a=1,.b=2);
func(1,2); // こっちでも呼べる


もちろん使った事は無いが
0543デフォルトの名無しさん2011/07/15(金) 15:46:40.63
リスト便利すぎwwwwwwwwwwww
何が問題なんだよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0544デフォルトの名無しさん2011/07/15(金) 15:56:23.06
mapもlistも使ったことない
全て構造体配列で対応している

for(i=0;i<参照リスト;i++)

if(商品[0]==参照リスト[i])
{
}
find?イラネ
0545デフォルトの名無しさん2011/07/15(金) 17:54:18.57
listはvectorで十分な場合も多いが、mapはすごく良く使うがなぁ
まあstd::mapよりboost::unordered_mapのが良く使うが
0546デフォルトの名無しさん2011/07/15(金) 17:56:14.24
find()ですむところをループで回してるのはふつーにダメだな。
0547デフォルトの名無しさん2011/07/15(金) 18:05:27.44
>>546
それ気になっているんだけど

ループで
1,2,3,4,5・・・・と上から順番に検索していくのと
findで先頭から調べるのって、内部処理は一緒じゃねーのか?

違うの?
0548デフォルトの名無しさん2011/07/15(金) 18:42:11.69
>>547
理論上はfindの計算量オーダーは
配列をバイナリーサーチならO(log N)
ツリーマップなら O(log N)
ハッシュマップなら O(1)

だが線形探索はO(N/2)
この差はサイズが大きいほど顕著に現れる
0549デフォルトの名無しさん2011/07/15(金) 18:49:47.01
privateな関数もなんらかの方法で関数ポインタにアドレスを教えてやれば
別クラスから実行できちゃいますか?
0550デフォルトの名無しさん2011/07/15(金) 19:35:47.48
>>548
言われてみりゃ〜

みつかった時点で処理が終わるfind
1つ目の要素だとしても最後まで調べてからでないと処理が終わらない全サーチ

10個程度ならまだしも、1000、10000と数が増えると
何度もサーチする必要が出てくる構造となったら無視できなくなるな
0551デフォルトの名無しさん2011/07/15(金) 20:14:41.30
>>549
std::function<void ()> func = std::bind(&test::プライベートなメンバ関数名, インスタンスへのポインタ);
0552デフォルトの名無しさん2011/07/15(金) 20:17:00.11
>>550
そもそも、仮に効率が同じだとしてもループの中身を見ないと検索していることが分からないだろ。find()なら間違いようがない。strcpy()なんかを使うのも同じことだ。
0553デフォルトの名無しさん2011/07/15(金) 20:27:20.24
超初心者時代

他人のソースを見てもMAPの初期設定がよくわからなかったな
下準備という点では配列でループを組んだほうが遥かにわかりやすい

検索データ数が50未満の初心者のお勉強という低次元の話だけど
0554デフォルトの名無しさん2011/07/15(金) 20:28:06.43
>>551
bindとか使うんですね。。さらっと流してたけどいろいろ出来そう
ありがとうございました
0555デフォルトの名無しさん2011/07/16(土) 08:09:28.03
a[i++] = i; は未定義って規格にも注釈があるけど、
a[i] = i++; a[i] = func(i++); a[i++] = i % 2 ? 0 : 1; j = i++ + i; こんなのも全部未定義でしょうか?
0556デフォルトの名無しさん2011/07/16(土) 10:30:16.62
a[i++] = i % 2 ? 0 : 1;
これだけ未定義じゃない
0557デフォルトの名無しさん2011/07/16(土) 11:05:38.65
a[i++] = (j = i % 2) ? 0 : 1;
って書くと大丈夫じゃないような気も。いや気のせいか?
0558デフォルトの名無しさん2011/07/16(土) 11:17:55.21
要は左辺で++したりする変数が、右辺に出てきちゃったら未定義だったかと。
たとえカッコでどうしようとも。
0559デフォルトの名無しさん2011/07/16(土) 11:27:55.74
>>557,558
馬鹿は死ね
0560デフォルトの名無しさん2011/07/16(土) 11:49:21.94
× a[i] = i++;
○ a[i] = func(i++); // 関数呼び出しは副作用完了点
× a[i++] = i % 2 ? 0 : 1;
× j = i++ + i;

http://www.kouno.jp/home/c_faq/c3.html#8 参照
0561デフォルトの名無しさん2011/07/16(土) 11:52:57.83
×◯◯×じゃないのか?
0562デフォルトの名無しさん2011/07/16(土) 11:57:29.43
ああそうだね。?:演算子も副作用完了点だ。
0563デフォルトの名無しさん2011/07/16(土) 11:58:27.51
>>561
◯◯××じゃないのか?
0564デフォルトの名無しさん2011/07/16(土) 12:00:47.45
>>563
◯×◯×じゃないのか?
0565デフォルトの名無しさん2011/07/16(土) 12:05:08.58
××××じゃないのか?
×××◯じゃないのか?
××◯×じゃないのか?
××◯◯じゃないのか?
×◯××じゃないのか?
×◯×◯じゃないのか?
×◯◯×じゃないのか?
×◯◯◯じゃないのか?
◯×××じゃないのか?
◯××◯じゃないのか?
◯×◯×じゃないのか?
◯×◯◯じゃないのか?
◯◯××じゃないのか?
◯◯×◯じゃないのか?
◯◯◯×じゃないのか?
◯◯◯◯じゃないのか?
0566デフォルトの名無しさん2011/07/16(土) 12:17:10.31
おまえマジで暇だな
05675632011/07/16(土) 12:31:58.56
> a[i++] = i; は未定義って規格にも注釈があるけど、
a[i] = i, i++;
0568デフォルトの名無しさん2011/07/16(土) 13:37:33.41
>>567
つまんねーよ。引っ込んでろ。
0569デフォルトの名無しさん2011/07/16(土) 13:40:09.33
>>567
a[i] = (i, i++);
こうするとやはり未定義か。括弧で評価順は変わらない?
05705632011/07/16(土) 14:48:48.27
> a[i++] = i; は未定義って規格にも注釈があるけど、
int j = i, a[i++] = j;

>>569 は a[i] = i++; と同じじゃないか。
>>568 は int j = i++, a[i] = i; の可能性もあると。
0571デフォルトの名無しさん2011/07/16(土) 14:54:09.17
>>570
頭大丈夫か?
05725632011/07/16(土) 15:12:26.70
そうか、訂正して修正
>>568 は int j = i, a[j] = ++i; の可能性もあると。
0573デフォルトの名無しさん2011/07/16(土) 15:16:11.23
>>563
もう、いいから引っ込んでろ。痛々しすぎる。
0574デフォルトの名無しさん2011/07/17(日) 11:40:17.96
スコープに関して
そのブロックで使われなくなった時点で破棄されるのか
ブロックを抜けるときに破棄されるのか知りたいです
0575デフォルトの名無しさん2011/07/17(日) 11:42:08.82
STLの使い方について悩んでます
std::list<MyClass*> mylist
で行こうか、
std::list<MyClass> mylist
で行こうか。。

前者なら
MyClass * p = new MyClass();
mylist.push_back(p);
std::list<MyClass*>::iterator it = mylist.begin();
delete (MyClass *)(*it);
みたいな流れで、作成、削除ができるけど、後者だとどうなるのですか?

MyClass * p = new MyClass();
mylist.push_back(*p);
std::list<MyClass>::iterator it = mylist.begin();
delete (MyClass *)&(*it); //←じゃないよね。これだとコピーしか消せないし
delete p; //結局pが含まれるスコープで消すしかない?

アドバイスください
0576デフォルトの名無しさん2011/07/17(日) 11:51:55.44
>>574
ブロックを抜けるとき

>>575
後者はdeleteいらないnewする必要もない
MyClass a;
mylist.push_back(a);
これだけでいい
05775752011/07/17(日) 12:03:11.39
>>576
ありがとうございます
後者を選択する場合、実体のコピーをリストに作るという思想の設計なのでしょうか?
また、取り出して値を参照したり書き換えたりする場合はどのようにすればよいのでしょうか?
MyClass & ra = (*it);
ra.x = 100;
ra.y = "abc";
みたいにやるのですか?(コンパイルできるかどうかはわかりません。机上で考えて書いてます)

連続で質問してすみませんがよろしくお願いします
0578デフォルトの名無しさん2011/07/17(日) 12:07:18.75
>>577
それでもいいけど
it->x = 100;
it->y = "abc";
でもいける
0579デフォルトの名無しさん2011/07/17(日) 12:09:16.15
STLはオブジェクトの複製を格納する
(*it)は複製されたオブジェクトへの参照を返す
もとのオブジェクトとは関係ない
05805752011/07/17(日) 12:17:05.08
>>578-579
なるほど!ありがとうございます!
STLの使い方わかってませんでした。。
0581デフォルトの名無しさん2011/07/17(日) 12:19:04.76
Cを経由せずにC++を学んだにおいがするな
05825752011/07/17(日) 12:32:09.67
参考までにお伝えするとCからC++に入っています。
0583デフォルトの名無しさん2011/07/17(日) 12:35:51.77
あなたのことはどうでもいいです
0584デフォルトの名無しさん2011/07/17(日) 12:50:31.34
慇懃無礼なQの匂いがする
0585 ◆QZaw55cn4c 2011/07/17(日) 14:28:02.78
>>584
へえ、こんなスレもあるんですね。
0586デフォルトの名無しさん2011/07/18(月) 07:46:49.06
>>579
> 複製を格納する

mylist.push_back(MyClass());
この場合もコピーコンストラクタが作動してMyClassのコピーが保持されるって事ですか?
0587デフォルトの名無しさん2011/07/18(月) 08:52:45.86
>>586
基本的にはそうだよ
最適化とか考えると微妙に違うけどそのへんは深く考えなくていい
0588デフォルトの名無しさん2011/07/18(月) 08:56:28.57
>>587
ありがとうございます。

「c++はコピーの概念で出来てる」ってどこかで聞いた事があったので、
このあたりが関係してるのかなと思いました。
0589デフォルトの名無しさん2011/07/18(月) 10:23:18.56
参照を引き摺り回して破綻している言語より判り易いね。
0590デフォルトの名無しさん2011/07/19(火) 01:36:39.31
vecotr<int> vecNum;
vecNum.push_back(100);
vecNum.push_back(230);
vecNum.push_back(10);

vecotr<int>::iterator it;
it=vecNum.find(10);

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
map<string, string> mapSt;r
mapStr.insert(pair<string, string>("i", "aaa"));
mapStr.insert(pair<string, string>("ro", "bbb"));
mapStr.insert(pair<string, string>("ha", "ccc"));

map<string, string>::iterator it;
it=vecNum.find("ro");

イテレータなんですけど
使うコンテナの型?はmapなのかlistなのかvectorなのかわかるんだから
vecotr<int>::iterator it; や map<string, string>::iterator it; わざわざ書かず

iterator it;
it=vecNum.find(10);

iterator it;
it=vecNum.find("ro");

と自動認識してもいいだろ?と思ったのですが、初心者だからそう思うんですかね
もしかしたら仕様なんだからそう記述しろ!という話で済んでしまう事かもしれませんけど
0591デフォルトの名無しさん2011/07/19(火) 03:01:52.81
>>590
心配すんな
C++1Xからはautoになる
今のC++が自動認識しないのはCからの哲学「プログラマはコンピュータに何を
させようとしているのか完全に理解している」を引きずっているから

しかし俺の予想だけどC++1Xは不発に終わるような感じがしている
C++ですら脱落者が多量に出てCに敢えて留まるプログラマが多かったのに
C++1Xはちょっとヤバさを感じている
0592デフォルトの名無しさん2011/07/19(火) 03:05:18.94
VC++2010ならすでにautoでいけるよ
何気にautoの使い方で一番有効だよな
いろんなコンテナを舐めるループをマクロで一括定義できる
0593デフォルトの名無しさん2011/07/19(火) 09:46:54.82
ひきずってるて
0594デフォルトの名無しさん2011/07/19(火) 11:28:47.33
>>590
typedef で少しは楽になる

typedef map<string, string> HogeMap;
HogeMap hogeMap;
HogeMap::iterator it = hogeMap.find(??);

とか

さらにBOOST_FOREACHでループだけならもっと楽になる。イテレータいらず
BOOST_FOREACH(HogeMap::value_type& v,hogeMap)
{
 処理
}
0595デフォルトの名無しさん2011/07/19(火) 11:46:26.56
BOOST_FOREACHは酷いコード吐くから使いたくないわ
0596デフォルトの名無しさん2011/07/19(火) 12:07:03.88
>>595
もうすでに酷いコード書いてるから
大丈夫だよ
0597デフォルトの名無しさん2011/07/19(火) 12:10:33.88
なるほど
0598デフォルトの名無しさん2011/07/19(火) 20:37:02.86
C++0xならrange base forになってBOOST_FOREACH捨てられるんだけど
0599デフォルトの名無しさん2011/07/20(水) 03:33:38.74
コンセプトさんがいないrange base forの実装なんて
0600デフォルトの名無しさん2011/07/20(水) 14:03:17.46
;をオーバーライドしったったwwwwwwww
うそですけどねwwwwwwwwwwwwwwwwwwwwwwwww
0601デフォルトの名無しさん2011/07/21(木) 00:26:09.10
C#とJavaしかやったことのない日曜プログラマで
これからC++をやってみようと思うんだが、Cやっといたほうが理解が進むのかな?
オブジェクト指向から学んだからいまいち手を出しにくいのだけれど…
0602デフォルトの名無しさん2011/07/21(木) 00:31:19.91
>>601
C#からな絶対うぜーってなるから
学ばない方がいい
0603デフォルトの名無しさん2011/07/21(木) 00:45:41.16
C++を勉強してC++に慣れてしまったが
C#から覚えたのなら、わざわざC++なんか覚えなくて良い
特に困ってなければC#でいいだろ

と、にわかC++使いは強くそう思う

その時間でC#の理解度を高めたほうが100倍マシだな
0604デフォルトの名無しさん2011/07/21(木) 01:01:47.20
C/C++はJavaやC#とはコンセプトが違う。
そのコンセプトの違いに意味を見出せないならやる必要がない言語。
0605デフォルトの名無しさん2011/07/21(木) 01:23:08.02
不思議なことに、ある観点に立つと、
CとJavaは似ていて、
C++とC#もまた似ている。
0606デフォルトの名無しさん2011/07/21(木) 01:24:10.49
OS造りたいんならCやっといた方が良いな
0607デフォルトの名無しさん2011/07/21(木) 08:54:06.81
>>601
cでoopのやり方があるんだけどね、それを覚えたらc++の基礎はすぐに覚えられるよ。
あー、そんやって実現してんだ。
あー、そこをやってくれてるんだ。
あー、これが何でも作れるって奴か。
ってなるよきっとw
0608デフォルトの名無しさん2011/07/21(木) 09:24:04.90
>>607
それ大事
で次はstringやboostの実装みて
他言語のあれはこうやって動いてるのかとやる
0609デフォルトの名無しさん2011/07/21(木) 12:20:30.50
まずはCASL IIを学べ
Z80や8086でもいい
やっておくと理解度が全然違うぞ
0610デフォルトの名無しさん2011/07/21(木) 12:55:02.88
すみません。
CreateWindow関数で作ったウィンドウに、ファイルをドラッグ&ドロップしてそのフルパスを取得したいのですが、
どう実現すれば良いのでしょうか? ググるべきワードか関数名を教えて下さると幸いです;
0611デフォルトの名無しさん2011/07/21(木) 12:57:13.70
WM_DROPFILES
0612デフォルトの名無しさん2011/07/21(木) 12:58:42.79
>>610
「winapi ドラッグアンドドロップ」でググると一番上に出てくるよ。
06136102011/07/21(木) 13:11:23.78
>>611 >>612
早速具体的な情報を見る事ができました。ありがとうございますっ
0614デフォルトの名無しさん2011/07/22(金) 07:21:26.10
すみません。文字の書き換えを行いたいのですが上手く行かず困っています。
char text[50] = "abcdefghijklmn.og";
char *tgt;

tgt = strstr(&text[0], ".og");
if(tgt != NULL) { sprintf_s(tgt, sizeof(tgt), ".txt\0"); }

tgtのサイズより大きい文字を入れようとしてしまっているので、Buffer too smallのエラーが出るのは当然とは思うのですが・・
strstrの検索結果を、text[]の要素ナンバーに直す方法か、もっと正しいやり方があれば教えて頂けますと助かります;
0615デフォルトの名無しさん2011/07/22(金) 07:38:10.82
>>614
sizeof(tgt)は使えないぞ
ちゃんと計算して残りのメモリのサイズを渡さないと
0616デフォルトの名無しさん2011/07/22(金) 07:43:54.96
if(tgt) sprintf_s(tgt, text - tgt + sizeof(text), ".txt");
0617デフォルトの名無しさん2011/07/22(金) 07:45:41.54
わかりにくい罠教えるなよ
0618デフォルトの名無しさん2011/07/22(金) 07:49:55.43
こんな感じでしょ
sprintf_s(tgt, sizeof(text)-(tgt-text), ".txt");
06196142011/07/22(金) 08:35:49.24
>>615-618
沢山のご助言ありがとうございます。 sizeof(tgt)が間違いだったんですね。
そして、tgtを計算に使うと元の配列のサイズ+検索結果位置の値になるんですね。初めて知りまりた。
勉強なります。 無事解決し最低限は理解をする事ができました。 ありがとうございました〜
0620 忍法帖【Lv=30,xxxPT】 2011/07/22(金) 09:48:36.87
>>619
ポインタ周りの計算が解ってない悪寒。
それと、なんの為にsprintf_s()に使える領域サイズを教示しているのかも解っていない悪寒。
0621デフォルトの名無しさん2011/07/22(金) 09:50:13.13
仕事だとしたら大迷惑だな。
0622デフォルトの名無しさん2011/07/23(土) 15:23:16.52
「KEY=VALUE」みたいな行が複数あるテキストファイルを行単位で読み込んで、
map(string, string)にkeyとvalueを分けて挿入したいんですが、C言語のstrtokのように新しいbasic_stringを生成せずに、
文字列のRangeだけ渡して生成する、みたいなことはできないんでしょうか?

map<string, string> config_map;
ifstream config_is(".config");
string line;
string::size_type index = 0;

while (getline(config_is, line)) {
  if ((index = line.find("=")) == string::npos) {
    continue;
    // line[index++] = '\0'; // C言語でやると←↓のような感じになることをC++でやりたい。substrではなく。
    // config_map.insert(map<string, string>::value_type(line, line[index]));
  }
}
0623デフォルトの名無しさん2011/07/23(土) 15:27:01.25
上のコード、continue後の閉じブロックが下にずれてしまってます・・。
0624デフォルトの名無しさん2011/07/23(土) 16:02:04.99
while(1)
じゃなくて
for(;;)
を使えって言われたけど何で?
0625デフォルトの名無しさん2011/07/23(土) 16:06:32.00
>>624
そんなのは個人の好みだから、言った本人に聞くしか無いよ
1がマジックナンバーみたいで気に入らなかったんじゃないの
0626デフォルトの名無しさん2011/07/23(土) 16:14:58.16
>>622
stringのコンストラクタ見たらなんとでもなるんじゃないのか
0627デフォルトの名無しさん2011/07/23(土) 16:16:06.12
>>624
while(1)だと毎回真偽値判定されてループするが
for(;;)だと空白→特殊処理としてループすることになるんでコストがお得とか何とか
そしてこれはいにしえの話らしい
0628デフォルトの名無しさん2011/07/23(土) 16:19:44.55
>>627
いしにえだと断って言われたんなら
そういう話で解決してるんじゃん

何十年前の話だよって感じだが
0629デフォルトの名無しさん2011/07/23(土) 16:23:55.18
>>622
>「KEY=VALUE」みたいな行が複数あるテキストファイル
それiniファイルの書式だから
所謂MBCSの扱いでいいならboostかwindowsならapi使えば?
win32apiなら予めUnicodeにしておけばそのままwstringに入れられるし
0630デフォルトの名無しさん2011/07/23(土) 20:10:23.68
なぜかswitch分岐は駄目という先入観が染み付いているのですが
本当に駄目なんですかね?

例えばESCで処理終了、 F1でメニュー F2でxxx というキーで分岐するのを

if(ESC)
if(F1)
if(F2)

switch (key){
case ESC
case F1
case F2
}

数が増えたらcaseのが処理が早くなると言う認識でいいですか?
(ifの場合は毎回全部調べなければならない。caseはその項目に飛ぶ)
0631デフォルトの名無しさん2011/07/23(土) 20:13:43.59
if
else if
にしろ
0632デフォルトの名無しさん2011/07/23(土) 20:14:30.89
はい
0633デフォルトの名無しさん2011/07/23(土) 20:14:51.17
まず、そのスイッチに対応するのは、
if(ESC)
else if(F1)
else if(F2)
だろうに…。で、そんな書き方は冗長だから、
そんなときこそスイッチを使うんじゃないの。
0634デフォルトの名無しさん2011/07/23(土) 20:15:37.03
アセンブリコード吐かせてみればわかるけど、両方とも似たようなコードに
コンパイルされる。switchはジャンプテーブル使ったジャンプにはならない。
0635デフォルトの名無しさん2011/07/23(土) 20:17:08.54
break;抜けるなら変わらないけど
そうじゃなかったりしたらぜんぜん違ってくるよ
あと{}つけないとスコープも違っている
0636デフォルトの名無しさん2011/07/23(土) 20:41:11.93
>>626
詳しく教えてもらえますか?

>>629
それもありなんですが、C++を覚えている最中で、
C言語で出来る一番効率がいい方法(文字列を複製せずに分割)をC++でどうやるのかと思い質問した感じです。
最終的に手段はいいように調整したいんですが、同じようなことをしたいとき、C++ならどうやるのかなと。

個人的には string の特定部分だけをアドレスで持つ range みたいなものがあると思っていたんですが・・・
0637デフォルトの名無しさん2011/07/23(土) 20:51:35.58
そんなのはない
0638デフォルトの名無しさん2011/07/23(土) 20:54:04.93
>>634
こちらの意図を読み取って、どうでもいいところをギャーギャー騒ぐ典型的な駄プログラマーと違って
ピンポイントな回答をありがとうございます
0639デフォルトの名無しさん2011/07/23(土) 21:11:30.22
>>636
substrでダメな理由は?
0640デフォルトの名無しさん2011/07/23(土) 21:20:32.92
>>638
>>634でswitchがだめな理由がよくわからないんだけど。
最適化のためにわざわざswitch書くのに最適化されてねーじゃんって意味?
0641デフォルトの名無しさん2011/07/23(土) 21:28:08.64
にわかクン「switchってだめと思い込んでいるけど本当にだめなの?」
その他大勢「内部処理はほぼ同じ」
にわかクン「おなじなのか」

                                       おわり

って意味じゃね?
0642デフォルトの名無しさん2011/07/23(土) 21:28:57.49
>>640
質問者はswitchはジャンプテーブル使った間接ジャンプにコンパイルされると
思ってたから、>>630のような質問をした。
実際はそんなコードにはならないという事がわかれば、どっちで書いても実際
は大差がないので読みやすい方で書けばいいという結論が得られる。
0643デフォルトの名無しさん2011/07/23(土) 21:33:27.06
>>636
string ( const string& str, size_t pos, size_t n = npos );
あるんだから, findの結果を元に
config_map.insert(map<string, string>::value_type(string(line, なんか整数変数, , なんか整数変数), string(line, なんか整数変数, , なんか整数変数)));
ってすりゃいーじゃん
06446392011/07/23(土) 21:38:30.84
std::map<std::string, std::string> config_map;
std::string line = "abc=def";
std::string::size_type index = line.find("=");
config_map.insert(std::make_pair(line.substr(0, index), line.substr(index+1)));

やってることは>>643と一緒
0645デフォルトの名無しさん2011/07/23(土) 21:40:42.15
変数をカウントアップしながらループするのは、whileでもforでも書けるけど
for()のほうがその意図が明確になる。
一個の変数を参照して分岐する処理ならswitchがいいな。
0646デフォルトの名無しさん2011/07/23(土) 21:46:22.94
boost::stringtok()
0647デフォルトの名無しさん2011/07/23(土) 21:51:59.05
どのみちstlコンテナなんだからコピーしまくりだろうに


0648デフォルトの名無しさん2011/07/23(土) 21:55:46.52
C++1Xが出てmove constructorが多用されるまでコピーで我慢だな
0649デフォルトの名無しさん2011/07/23(土) 21:58:52.44
というか文字列をある
>文字列のRangeだけ渡して生成する
のがsubstrじゃなかったっけ?
(開始位置も渡すけど)
0650デフォルトの名無しさん2011/07/23(土) 22:00:07.70
あ、たしかにこのやり方ならコピーした方がいいね。入力がストリームだしコンテナに入れてるし。
結局ファイルの中身全部読み込んで、複製せずに終端記号だけ付け替えて使いまわせるよう分割するってのをC++でしたかった。
コンテナに入れたりini形式がどうこうなりはその次で。

>> 646
サンクス

>> 649
substrは中でコピーしちゃってるじゃん
0651デフォルトの名無しさん2011/07/24(日) 02:41:17.18
>>626
stringがどうこうより、mapがどうこうだからなぁ
自前でコンテナもどき作るしかないだろう

あるいは開始位置・終了位置を保持したクラスをmapしてもダメかね?
0652デフォルトの名無しさん2011/07/24(日) 15:24:29.40
>>641
にわかクン「switchって良いと思い込んでいるけど本当に良いの?」

ってんなら文章として通じるんだけどね。
0653デフォルトの名無しさん2011/07/24(日) 15:59:50.47
hanakusogaumai.
0654デフォルトの名無しさん2011/07/24(日) 16:05:24.66
>>652
へ?
0655デフォルトの名無しさん2011/07/24(日) 17:48:02.91
VC++で開発してます。
Cの書式出力が便利で、大体次のようにやってます。
int len = _scprintf("%s", "hello");
char * p = new char[len+1];
sprintf(p, "%s", "hello");
delete [] p;

STLもしくはC++標準関数が使える環境で
これをもっとエレガントなやり方を教えてくださいませんでしょうか?
まことに勝手ですがふしてお願い申し上げます。
0656デフォルトの名無しさん2011/07/24(日) 17:51:58.98
char *p = strdup("hello");
free(p);
0657デフォルトの名無しさん2011/07/24(日) 17:55:59.00
std::string s = (boost::format("%s") % "hello").str();
0658デフォルトの名無しさん2011/07/24(日) 18:00:06.29
> STLもしくはC++標準関数が使える環境で
この環境では
> Cの書式出力が便利
こう考える人を納得させるものがないので、boost::formatというのが作られた。
直球でいうとその環境でエレガントな方法は無い。
0659デフォルトの名無しさん2011/07/24(日) 19:47:23.96
やっぱそうなんですね。
ありがとうございます。
これで堂々とこの汚いやり方で行けます
0660デフォルトの名無しさん2011/07/24(日) 22:05:48.90
C++でクロスプラットフォームなMIDIライブラリをRtMidi以外で知りませんか?
0661872011/07/25(月) 00:04:51.15
1バイト文字の配列から、全ての文字の出現回数をカウントしたいのですが(文字のヒストグラム)
どのコンテナを使ったら幸せになれますか?
0662デフォルトの名無しさん2011/07/25(月) 00:28:48.07
int count[256] = {0};
while (*p != '\0') ++count[*p++];
0663デフォルトの名無しさん2011/07/25(月) 00:33:14.40
multiset
0664デフォルトの名無しさん2011/07/25(月) 09:54:50.35
>>660
sdlとか?
0665デフォルトの名無しさん2011/07/25(月) 13:20:35.95
>>654
あるいは、最後が
にわかクン「別にだめじゃないのか」
でもおk
0666デフォルトの名無しさん2011/07/25(月) 22:05:22.85
Visual C++で、クラスファイルを作成した際に自動的にヘッダファイルも作成されるんですが、
そのクラスファイルをincludeすると「既に (class).obj で定義されています」とエラーになります。
どうすればいいでしょうか。

test.cppをincludeするとエラー
=== test.cpp ===
#include "test.h"

test::test(void)
{
}

test::~test(void)
{
}

=== test.h ===
#pragma once
class test
{
public:
test(void);
~test(void);
};
0667デフォルトの名無しさん2011/07/25(月) 22:09:50.61
cppファイルをインクルードするなよ
0668デフォルトの名無しさん2011/07/25(月) 22:17:45.24
すみません、では test.cpp で実装したメンバを利用する際には
どうすればいいのでしょうか?
0669デフォルトの名無しさん2011/07/25(月) 22:18:57.86
>>668
なんのためにヘッダにクラスを公開してんだよ
ヘッダをインクルードして好きなだけ使えばいい
0670デフォルトの名無しさん2011/07/25(月) 22:29:42.41
重ね重ねありがとうございます。.cppファイルに.hファイルへのincludeがあるので、
main.cpp→test.cpp→test.h というように読まれていくものかと思っていたのですが、
実際には test.h からincludeすると test.cpp も読まれるのでしょうか……?
test.cppの中の #include "test.h" は何のためにあるのでしょう?
0671デフォルトの名無しさん2011/07/25(月) 22:32:19.98
>>670
main.cppとtest.cppは別々にコンパイルされます
#include "test.h"しないと
testがなにを意味しているかコンパイラさんが分からないだろ
06726602011/07/25(月) 22:40:37.69
>>664
レスありがとうございます。
MIDIってのはMIDIファイルのことじゃなくて
MIDI I/Oってことでした。バーチャルポート作ってそっからMIDI信号出力とかがやりたかったんです。
明記してなくてすみません。
まさにRtMidiの様な機能があればいいのですが、
RtMidiはMac OS Xでユニバーサルビルドができなくて...
0673デフォルトの名無しさん2011/07/25(月) 22:52:09.98
>>671
ありがとうございます。test.cppがいつどう呼ばれるのかだけがまだわかってません……
でも、おかげさまで何となくわかってきた気がします。
Cは(当方PHPをかじったことしかないのですが)includeを追うのではないんですね。
確かに、test.cpp単体でコンパイルする時のことを考えると、test::test って何だよって話ですよね。
0674デフォルトの名無しさん2011/07/25(月) 23:03:35.67
main.cpp をコンパイルする → main.obj ができる
test.cpp をコンパイルする → test.obj ができる
main.obj と test.obj とそのほかもろもろ (printfとかscanfとかいろいろたくさん) をリンクする → .exe ができる
0675デフォルトの名無しさん2011/07/25(月) 23:53:26.50
includeって呼ぶ、というよりは1ファイルごとに正しい動作をできるようコンパイラに示すためだけのものって感じですね。
(↑我ながら意味不明な文ですが、何となく理解したつもりです)
レス遅れてしまいすみません。恐らく理解できました。
本当にありがとうございます。感謝しています。
0676デフォルトの名無しさん2011/07/26(火) 00:05:03.81
include ってのは単に指定したファイルの内容をコンパイル前にその場所にぶちまけるだけ
#include "test.h"と書く代わりにtest.hの中身をそこに書いてるのと同じこと
0677デフォルトの名無しさん2011/07/26(火) 00:17:07.74
どうもコンパイルの最中に追っていくようなイメージがあったのです。
自分の中の勘違いも解け、スッキリできたと思います。本当にありがとうございます。
0678デフォルトの名無しさん2011/07/26(火) 02:03:20.45
ある関数で構造体配列を宣言して、アドレス渡しで他の関数に渡した場合、アドレスを受けとった側の関数で初期化は可能でしょうか?
0679デフォルトの名無しさん2011/07/26(火) 02:04:32.05
可能
0680デフォルトの名無しさん2011/07/26(火) 06:11:45.30
ありがとうございます。
どのように記述すれば良いでしょうか?

下記の様な書き方でしょうか?
memset(test,0,sizeof(*test));
0681デフォルトの名無しさん2011/07/26(火) 08:22:32.00
ok
0682デフォルトの名無しさん2011/07/26(火) 08:24:48.11
>>680
Cならまぁ、それでもいいけどC++だったらダメ。
0683デフォルトの名無しさん2011/07/26(火) 10:34:12.85
上記記述方法では構造体配列の[0]しか初期化されませんでした。やはり、配列数も渡さない限り、関数側ではわからないですよね。
0684 忍法帖【Lv=32,xxxPT】 2011/07/26(火) 11:55:48.14
>>683
配列数なんて渡しても意味ないだろ。要素数を渡しておけ。
0685デフォルトの名無しさん2011/07/26(火) 14:33:39.87
vectorでサイズを指定して二次元配列を作るとき、例えば2×3の配列なら
vector<vector<int> > a(2, vector<int>(3));
とできますが、3次元配列の場合の書き方を教えてください
0686デフォルトの名無しさん2011/07/26(火) 15:06:22.28
>>685
応用利かない奴だな。
ほれ。
http://ideone.com/qixkT
0687デフォルトの名無しさん2011/07/26(火) 15:17:20.17
>>686
ありがとうございます
0688デフォルトの名無しさん2011/07/27(水) 06:29:32.58
static 型ですが

//hoge.h
func1()
{static int i;}
func2()
{static int i;}

//hoge1.h
func1()
{static int j;}
//hoge2.h
func2()
{static int j;}

jは別物で処理されると思うのですが、iは同じ物として扱われてしまう?
0689デフォルトの名無しさん2011/07/27(水) 07:48:00.45
スコープ
0690デフォルトの名無しさん2011/07/27(水) 09:50:51.70
で?
0691デフォルトの名無しさん2011/07/27(水) 09:59:00.94
.cに書いたグローバル変数は、staticをつけるとファイルごとのスコープに
なるけど、なんかそこらへんの話と混同してそう。
>>688はローカル変数だし、.hだし。
0692デフォルトの名無しさん2011/07/27(水) 10:06:27.97
なんでヘッダーに書いてんだ
0693デフォルトの名無しさん2011/07/27(水) 11:18:21.04
stlに言え
0694デフォルトの名無しさん2011/07/27(水) 11:27:57.60
まあinline関数とかテンプレートはヘッダに書かないといけないけど。
0695デフォルトの名無しさん2011/07/27(水) 11:44:03.37
いやいやw
質問者の内容だと

hoge.c
------
#include <hoge.h>
------

hoge1.c
------
#include <hoge1.h>
#include <hoge2.h>
------

とかになったら意味が無くなるだろw
0696デフォルトの名無しさん2011/07/27(水) 11:44:33.06
おっと、、<> は ""で
0697デフォルトの名無しさん2011/07/28(木) 14:51:12.22
メンバ関数内で宣言した静的ローカル変数って、
クラスのインスタンスをデストラクタで解体した時に消えてくれます?
0698デフォルトの名無しさん2011/07/28(木) 14:53:34.61
くれません
0699デフォルトの名無しさん2011/07/28(木) 14:55:14.91
ていうか作れたか?
メンバ関数もstaticなのか?
0700デフォルトの名無しさん2011/07/28(木) 15:05:29.60
すんません、シングルトンクラスです
回答ありがとうございます
0701デフォルトの名無しさん2011/07/30(土) 01:14:22.64
お願いします。vc10ですが
文字列をvector コンテナに代入するのに、このように書くのですが
error C2512: 'setVec::setVec' : クラス、構造体、共用体に既定のコンストラクターがありません。
こうなってしまします><何処が悪いのでしょうか?
#include <map>
#include <vector>
#include <algorithm>

std::string data = "abcdefg";

std::vector<char> vec;

struct setVec {
char ch_;
setVec(char& ch) : ch_(ch) {}
void operator()(char d_) const { vec.push_back(d_); }
};


int main()
{
std::for_each(data.begin(), data.end(), setVec() );
return 0;
}
0702デフォルトの名無しさん2011/07/30(土) 01:31:39.35
>>701
setVec(char& ch) : ch_(ch) {}
これ消せよ
0703デフォルトの名無しさん2011/07/30(土) 01:36:06.66
vec.insert(vec.cend(), data.cbegin(), data.cend());
素直にこう書け
0704デフォルトの名無しさん2011/07/30(土) 01:42:47.29
vec.assign(data.cbegin(), data.cend());でいいだろ
0705デフォルトの名無しさん2011/07/30(土) 16:27:23.15
>>701です
thx ALL
0706デフォルトの名無しさん2011/07/31(日) 22:58:02.88
オブジェクト、インスタンスをファイルに保存できるクラスがあると
どっかで読んだ気がするんですが、クラス名が思い出せません。
環境はVC++です。
0707デフォルトの名無しさん2011/07/31(日) 23:03:27.28
シリアライズとかマーシャルって技術だな
ex.Boost.Serialize

CLI使っていいなら
http://msdn.microsoft.com/en-us/library/2f7k4746.aspx
0708デフォルトの名無しさん2011/07/31(日) 23:04:19.85
CObject::Serialize
0709デフォルトの名無しさん2011/07/31(日) 23:41:48.13
>>707
>>708
多分それです!これから読んできます。
ありがとうございますm(_ _)m

もう一個質問をお願いします。
Visioみたいに図形同士を線で結ぶようなモノを
実現するライブラリってありますか?
0710デフォルトの名無しさん2011/08/01(月) 11:21:57.10
GraphVizみたいなことをしたいのかな?
0711デフォルトの名無しさん2011/08/01(月) 17:30:34.59
スレチかもしれませんが,WindowsでHPET使ってタイマコールバック設定する方法ありますか?
timeSetEventのHPET版みたいな….linuxではできました.
時間計測だけならQueryPerformanceCounterでいいことはわかりました.
Win Vista以降のみでOKです.
0712デフォルトの名無しさん2011/08/01(月) 18:51:05.27
>>710
ありがとうございます。

マウスを使ってドラッグ&ドロップで図形を配置し、
クリックで図形同士を線で結ぶイメージでいました。
質問が悪くてすいません。
0713デフォルトの名無しさん2011/08/01(月) 19:11:41.35
Qtのサンプルでそういうのがあったような・・・
0714デフォルトの名無しさん2011/08/02(火) 00:51:17.09
win32プロジェクトから、ファイルを転送したいと考えています。
具体的にはローカルでパスとファイル名が分かっている、ファイルを
アカウントとパスの分かっているftpに転送したい、と言った感じです。

しかし、検索しても転送自体全くしたことが無いので、どんな言葉で調べればいいのかもわかりません。
何かこういう言葉で調べろとか、このサイトを見ろとかありましたら教えてもらえないでしょうか。
0715デフォルトの名無しさん2011/08/02(火) 04:20:48.69
>>713
ありがとうございます。
Qtは4をインストールして英文ドキュメント見てますが、
いまだにサンプル以上を使えてないorz
0716デフォルトの名無しさん2011/08/02(火) 11:39:05.02
可変引数を処理する際にvsaprintfを使用したソースを組んだのですが、
GNUのソース開示の規約があるためプロパーがソースを組み直せと言います。
他に可変引数を処理できるような便利な関数はないでしょうか。
0717デフォルトの名無しさん2011/08/02(火) 11:41:55.29
__VA_ARGS__は
0718デフォルトの名無しさん2011/08/02(火) 12:11:18.45
templateとオーバーロードで頑張る
0719デフォルトの名無しさん2011/08/02(火) 15:20:37.82
>>714
wininet
0720デフォルトの名無しさん2011/08/02(火) 18:16:22.14
classAとclassBがn対nの関係でお互いの参照のリストを持ちたいのですが
c;ass B;
classA{
list<B*> b;
void Attach(B*)
void Detach(B*)
}

classB{
list<A*> a;
void Attach(A*)
void Detach(A*)
}

このようにしようとすると
error C2027: 認識できない型 'B' が使われています。
error C2227: '->(関数名)' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
となってしまいます。
コレを解決するにはどうしたらよいでしょうか?
0721デフォルトの名無しさん2011/08/02(火) 18:21:44.08
尻の穴?
0722デフォルトの名無しさん2011/08/02(火) 18:28:37.46
>>720
ポインタのリストを持つだけなら前方宣言だけでいける
おまえのコードがクソすぎて怒られる原因はわからん
0723デフォルトの名無しさん2011/08/02(火) 18:36:35.17
可能な限り、問題が出てるソースをコピペするようにしようぜ
それだけだと問題が多すぎて絞り込めないw
0724デフォルトの名無しさん2011/08/02(火) 18:48:02.32
>>720
とりあえずセミコロンがずいぶん足りないようだが大丈夫か?
07257202011/08/02(火) 18:58:22.62
コード全体が未完成なんで今できてるのはこんな感じです
Aのインスタンスが削除されたときに確実にBのDetachを実行して
Bがこの後追加する予定の処理で不正なAのポインタに触らないようにしたいと思っています

classA{
list<B*> b;
void Attach(B*pb){ b.push_back(pb);};
void Detach(B*pb){ b.remove(pb);};
~A(){
while(b.empty() ){
*(b.begine())->Detach(this); //ここでつまる
b.pop_front();
}
};

classB{
list<A*> a;
void Attach(A*pa){
a.push_back(pa);
pa->Attach(this);
}
void Detach(A*pa){
a.remove(pa);
pa->Detach(this);
}
};
0726デフォルトの名無しさん2011/08/02(火) 19:09:53.25
メンバ関数は宣言と定義を分けて定義は下の方にもっていけ
0727デフォルトの名無しさん2011/08/02(火) 19:22:15.23
>>726
ありがとう!
0728デフォルトの名無しさん2011/08/04(木) 19:51:57.16
すみません。Debugモードでビルドすると正常の動くのに
Releaseモードでビルドすると、破壊されていない様に見える変数へのアクセス違反で
異常終了してしまいます。

こういう場合、原因は何で、どういった確認を行うべきなのでしょうか・・?
>環境は、WinXPpro(32bit) VC++2008EE  Debug/Releaseともマルチバイト文字利用です
0729デフォルトの名無しさん2011/08/04(木) 19:59:15.37
>>728
まず疑うべきは、
・未初期化変数が無いか?
・マクロ分岐で悪いことをしていないか?
 例えばassert(処理) とか書いちゃって
 (処理)がreleaseだけ削られている、とか
・配列等範囲外メモリ不正アクセスはないか? 
 運よく(悪く?)debugではうまく動いているように見えていた

このあたりかなぁ
07307282011/08/04(木) 20:21:01.68
>>729
ありがとうございます。
assertも試しに数箇所使ってましたが、未初期化変数が山の様にあります;
まずはそっちからですね・・それでも解決しなかったらメモリ不正アクセスを絞り込みながら調べてみます、
ご助言ありがとうございました、感謝っ
0731デフォルトの名無しさん2011/08/06(土) 17:25:41.13
std::map のデータをfor_eachの第三引数で、operator()()をオーバーライドした関数オブジェクトに渡したいのですが
文法的に正しいのでしょうか?
ネットで探してもあまり例が出てないので、間違ってる気がするのですが?
0732デフォルトの名無しさん2011/08/06(土) 17:26:26.20
正しいですよ
0733デフォルトの名無しさん2011/08/06(土) 17:43:18.60
>>732
thx です
std::map はfor_each できない仕様ということですね。
boost やloki でも同じなんでしょうか?
0734デフォルトの名無しさん2011/08/06(土) 17:54:31.55
正しいつってんだろが
0735デフォルトの名無しさん2011/08/06(土) 19:25:45.10
厳密には正しくない
0736デフォルトの名無しさん2011/08/06(土) 20:48:14.82
struct stdout {
void operator()(map<char,double>::value_type pair) const
{ cout<< pair.first << ':' << pair.second << endl;}
};

これを、ジェネリックtemplate ではどのように書いたらいいですか。
0737デフォルトの名無しさん2011/08/06(土) 22:05:37.57
template <typename K, typename V>
struct Stdout {
void operator()(typename map<K, V>::value_type& pair) const
{ cout<< pair.first << ':' << pair.second << endl;}
};
0738デフォルトの名無しさん2011/08/06(土) 22:30:28.20
>>737 thx
0739デフォルトの名無しさん2011/08/10(水) 02:47:53.63
int=32bitていつまで続くんだ
もう10年以上たってるだろ
0740デフォルトの名無しさん2011/08/10(水) 02:57:43.49
もう変えないと思うよ
0741デフォルトの名無しさん2011/08/11(木) 22:50:25.60
#include <stdio.h>

void rev_print(char *s){
if (*(s + 1))
rev_print(s + 1);
putchar(*s);
}

int main(void){
char s[] = "123456";
rev_print(s);
return 0;
}

こんな風に逆順に出力したい場合、再帰のループは何回まで出来るものなのでしょうか?
0742デフォルトの名無しさん2011/08/11(木) 22:59:13.76
スタックサイズと相談して
0743デフォルトの名無しさん2011/08/11(木) 23:13:18.03
スタック数MBだとしておよそ数万回から十万回くらいじゃね
0744デフォルトの名無しさん2011/08/12(金) 01:02:00.93
>>742,743
有難うございます。
10^5バイト程度のデータ処理をしようと考えてました。
0745デフォルトの名無しさん2011/08/12(金) 19:10:44.83
 どっかのC++ スレで誰かが聞いていたような気がするが何処か忘れたので聞きます
C でmalloc C++ ではnew でヒープメモリを確保しますが
これらを使う必要性としては、自分の解釈だと可変長の配列を生成する以外思いつきません
malloc newは、他にどのような用途がある?
0746デフォルトの名無しさん2011/08/12(金) 19:14:25.14
自動変数だとスコープを外れたらメモリから消えちゃうだろ
0747デフォルトの名無しさん2011/08/12(金) 19:15:31.22
>>745
スタックメモリ領域のサイズはそんなに大きくないから、
ヒープ使うしかない。
例えばVCならデフォルトで1メガしかない
0748デフォルトの名無しさん2011/08/12(金) 19:52:20.81
>>747
スッキリしましたthx
0749デフォルトの名無しさん2011/08/12(金) 20:50:21.04
可変長配列ならC99からmallocを使わずに作れるって思ったけど、VCはサポートしてなかったっけ?
0750デフォルトの名無しさん2011/08/12(金) 21:48:23.87
yaml-cppがBase64使ったバイナリの読み書きにちゃんと対応していないようなので
(元のバイナリデータによっては不正なBase64が出力される、
Base64からバイナリに戻せない等)
なので、C/C++で動くBase64エンコーダ/デコーダを探しているのですが、
何処のを使えばいいでしょうか
0751デフォルトの名無しさん2011/08/12(金) 21:49:47.07
思ったより簡単だから自作してみればいいと思うよ
07527502011/08/12(金) 21:58:29.97
うーん・・・じゃぁ頑張って作ってみます
0753デフォルトの名無しさん2011/08/12(金) 23:20:50.43
ttp://www.dinop.com/vc/ftp_wininet.html
こちらを参考にソースを、というか
#include "wininet.h"
#pragma comment(lib,"wininet.lib")
の2行を書いた所、wininet.hで大量にエラーが出ました。

一番最初のエラーが「typedef LPVOID HINTERNET;」行に
error C2146: 構文エラー : ';' が、識別子 'HINTERNET' の前に必要です。

とのことだったので、LPVOIDが定義されていないのだと思い、LPVOIDを調べたところ、
WinDef.hに定義されているようなので
wininet宣言の前に、WinDef宣言を追加しました。
すると今度はwininet.hの「PCONTEXT ContextRecord;」で
error C2146: 構文エラー : ';' が、識別子 'ContextRecord' の前に必要です。
が出ました。

また、PCONTEXTが宣言されているヘッダを定義すれば良いのかと思ったのですが、
PCONTEXTが「wininet.h」内にtypedef CONTEXT *PCONTEXT;と宣言されており、
この部分でエラーになる理由が分かりません。
その前のWinDef.h宣言含め、どのように修正すればいいでしょうか。
0754デフォルトの名無しさん2011/08/12(金) 23:24:30.37
>>753
#include <windows.h>
#include <wininet.h>
#pragma comment(lib,"wininet.lib")
0755デフォルトの名無しさん2011/08/13(土) 00:22:35.00
それでコンパイラは通りました。

で、後学のためにPCONTEXTがエラーになった原因を教えていただけないでしょうか。
今回はwindows.hの中にPCONTEXTの定義か、もしくはPCONTEXTの定義してあるヘッダーが宣言されている、ということなのでしょうが、
そうなると、「wininet.h」内のtypedef CONTEXT *PCONTEXT;の意味が分かりません。
むしろ二重定義になったりしないのでしょうか。
0756デフォルトの名無しさん2011/08/13(土) 00:47:06.54
>>755
winapiみたいな歴史的遺物の塊関係のプログラミングなら、
〜へっだにあるの定義が必要でコンパイルエラーはよくある話。
ちなみにtypedef は別名をつける言語構文
例えば typedef int* int_ptr;
とかすると、
int* p;
int_ptr p;
は同じ意味になる
0757デフォルトの名無しさん2011/08/13(土) 01:22:54.83
>>755
#ifdef _X86_
...
typedef CONTEXT *PCONTEXT;

// begin_ntminiport
#endif //_X86_
07587502011/08/15(月) 22:30:54.89
ビット演算やら何やらで苦戦しましたが、何とかなりました
base64書き込みのバグはcharではなくunsigned charで処理すパッチを当てて直しました。
で、読み込みの処理だけ自分で作りました。

文字数が4の倍数でない場合の処理に特に苦心しましたが、(最後に"="とか"=="のついているbase64)
文字数が4の倍数で無い場合だけ、最後に特別な処理を行わせるようにして自己解決しました
0759デフォルトの名無しさん2011/08/17(水) 17:01:45.21
限定staticメンバをポインタ使わず実現する方法ってなんかない?
struct A{int partial_static_x;};

A a0,a1,a2,a3;
a0.partial_static_x=a1.partial_static_x=0;
a2.partial_static_x=a3.partial_static_x=1;
a0.partial_static_x = 3;
assert(a1.partial_static_x==3&&a2.partial_static_x==1);//true
0760デフォルトの名無しさん2011/08/17(水) 22:51:15.23
>>759
もっと基礎からやり直せ
0761デフォルトの名無しさん2011/08/18(木) 21:37:32.27
すみません。コードの見た目の統一性についてです。

int型の変数 を「整数」を使ってビット判定しているのですが、
int temp = 2100010000;
// 10億の位の数字で処理を振り分ける
if (temp & 2000000000) { ... }
else if (temp & 1000000000) { ... }
else if (temp & 0000000000) { ... } // こうしたいけれど、無理な訳で・・。

10億で割った余りを判定するか、最後をif 10億未満と書けば良い話なのでしょうけれど、
同じビット判定で統一したりってできないものでしょうか・・?
0762デフォルトの名無しさん2011/08/18(木) 21:48:27.33
>>761
ビットの勉強するといいよ
if(2000000000 & 2000) printf("It can't be. ;-)");
0763デフォルトの名無しさん2011/08/18(木) 21:49:13.11
>>761
出来ない。出来ない理由を理解したいなら、中学校の数学からやり直せ。
0764デフォルトの名無しさん2011/08/18(木) 22:00:35.68
>>762
ありがとうございます; 1110111001101011001010000000000と、11111010000でtrueが返るんですね・・。
2の倍数の整数以外のビット判定は厳禁なのでしょうか。 何にしても勉強しなおしてきます。

>>763
何か統一性を保った別の記述方法が有れば・・と思いましたが、そんなものは無い というより上の問題で無意味なのですね。

ご助言ありがとうございます。早めに知れて良かったです。
0765デフォルトの名無しさん2011/08/19(金) 02:31:30.83
1110111001101011001010000000000
0000000000000000000011111010000
------------------------------- [AND]
0000000000000000000010000000000 ->true
0766デフォルトの名無しさん2011/08/19(金) 05:05:45.99
if (temp >= 2000000000) { ... }
else if (temp >= 1000000000) { ... }
else if (temp >= 0 ) { ... }
わかりやすい
0767デフォルトの名無しさん2011/08/19(金) 10:55:14.44
switch (temp / 1000000000) {
case 2:
{...;}
break;
case 1:
{...;}
break;
case 0:
{...;}
default:
break;
}
判りやすい。
if (temp >= 2000000000) { ... }
else if (temp >= 1000000000) { ... }
else if (temp >= 0 ) { ... }
0768デフォルトの名無しさん2011/08/22(月) 00:42:03.85
結局書く必要はなくなったのだけど、もし書かなきゃいけなかったらどうしようかと思ったこと。
どうしても解決しなきゃいけない話じゃないので、面白くなかったら流してくれて構わんけど、
面白い答え持ってる人がいたらレスください。

-FLT_MIN < b && b < FLT_MAXを満たすdouble型の値bが与えられたとき、
float型の値aとcで、bを内包するギリギリ狭い範囲を作りたい。

具体的には、次の3条件を満たすfloat型の値a, cを求めたい。
(1) a <= b && b <= c を満たすこと
(2) いかなるfloat型の値tについても a < t && t <= b を満たさないこと
(3) いかなるfloat型の値tについても b <= t && t < c を満たさないこと

できれば、標準ライブラリだけで、処理系非依存にしたい。
floatとdoubleをIEEE 754の単精度と倍精度に仮定できるのであれば、
ビット演算で仮数部を取り出したらできそうだと思ったが、もっとよい方法はないものか。
あるいは、どうせIEEE 754に仮定するんだったら、さらに現実的な仮定を使ってより簡単な方法はないものか。
0769デフォルトの名無しさん2011/08/22(月) 01:02:31.22
>>768
言いたいことが俺に伝わっているか微妙に自信がないけどこういうこと?
ttp://codepad.org/VfoFbiql
0770デフォルトの名無しさん2011/08/22(月) 01:25:08.55
俺もそれの事だと思った
0771デフォルトの名無しさん2011/08/22(月) 01:27:46.91
a = (float)b
c = nextafterf(b, FLT_MAX)
でいいのか自信ない
0772デフォルトの名無しさん2011/08/22(月) 01:40:47.53
結局-0.0fと0.0fって違うんですか?
0773デフォルトの名無しさん2011/08/22(月) 02:07:11.64
f = (float)b
if (f > b) { c = f; a = nextafterf(b, -INFINITY) }
else { a = f; c = nextafterf(b, INFINITY) }
にしないとまずいのか
0774デフォルトの名無しさん2011/08/22(月) 18:38:29.12
C++の新しい規格が決まったみたいですが、いま出てる入門書より、これから出る新規格にそった入門書を買った方がいいんでしょうか?
これまで蓄積されてきたノウハウや、公開されているソースは旧規格のものだから、そういうのを使う場合、新規格入門書より、旧規格の入門書を読んだほうがいいんですか?
0775デフォルトの名無しさん2011/08/22(月) 21:30:53.47
入門レベルで違いはないだろ。
07767682011/08/23(火) 01:03:52.84
nextafterfって、そのまんまな関数があったのですね。ついでにnexttowardfってのもあるのか。
0777デフォルトの名無しさん2011/08/23(火) 21:35:18.21
>>775
それじゃあ今出てる入門書買います。どうもありがとうございました。
0778デフォルトの名無しさん2011/08/24(水) 01:37:00.96
関数にstaticつける意味って何?
0779デフォルトの名無しさん2011/08/24(水) 01:45:12.79
ファイル外からその関数は呼ばれないよ、ということを主張させるため
0780デフォルトの名無しさん2011/08/24(水) 01:51:32.64
Cでは定義されたファイル外に公開しない関数ってこと
C++でのprivate関数みたいなもの
C++ではインスタンスを生成しなくても呼び出せる関数って事
0781デフォルトの名無しさん2011/08/24(水) 03:34:11.78
staticがついた関数は内部結合になる
逆に何も付いていないと外部結合になる
メンバ関数のstaticだと>>780のインスタンスを生成しなくても呼び出せる関数
0782365 2011/08/24(水) 12:27:55.41
STL勉強中ですが、for_eachでファンクタを外だしにするくらいなら
普通にfor文でいいと思うのですが、for_eachのほうがC++流なのでしょうか?
0783デフォルトの名無しさん2011/08/24(水) 16:11:10.99
>>782
BOOST_FOREACHはもう少し楽だぞ
0784デフォルトの名無しさん2011/08/24(水) 18:03:01.19
>>782
イテレーターを定義して使わなくて良いなどのこともあるけど、
for_each などが真に活きてくるのは、C++0x になってからよ。
0785デフォルトの名無しさん2011/08/24(水) 21:45:05.81
結局時間取得はどれ使えばいいんだよ
0786デフォルトの名無しさん2011/08/25(木) 00:58:20.52
if(boguDataObj.fukaS1[boguNo]==1)soubi_Eattack+=boguDataObj.fukaV1[boguNo];//遠距離攻撃
else if(boguDataObj.fukaS1[boguNo]==2)soubi_Kattack+=boguDataObj.fukaV1[boguNo];//近距離攻撃
else if(boguDataObj.fukaS1[boguNo]==3)tikara_p+=boguDataObj.fukaV1[boguNo]; //力
else if(boguDataObj.fukaS1[boguNo]==4)sutamina_p+=boguDataObj.fukaV1[boguNo]; //スタミナ
else if(boguDataObj.fukaS1[boguNo]==5)seisin_p+=boguDataObj.fukaV1[boguNo]; //精神
else if(boguDataObj.fukaS1[boguNo]==6)hanno_p+=boguDataObj.fukaV1[boguNo]; //反応
else if(boguDataObj.fukaS1[boguNo]==7)maryoku_p+=boguDataObj.fukaV1[boguNo]; //知恵

if(boguDataObj.fukaS2[boguNo]==1)soubi_Eattack+=boguDataObj.fukaV2[boguNo];//遠距離攻撃
else if(boguDataObj.fukaS2[boguNo]==2)soubi_Kattack+=boguDataObj.fukaV2[boguNo];//近距離攻撃
else if(boguDataObj.fukaS2[boguNo]==3)tikara_p+=boguDataObj.fukaV2[boguNo]; //力
else if(boguDataObj.fukaS2[boguNo]==4)sutamina_p+=boguDataObj.fukaV2[boguNo]; //スタミナ
else if(boguDataObj.fukaS2[boguNo]==5)seisin_p+=boguDataObj.fukaV2[boguNo]; //精神
else if(boguDataObj.fukaS2[boguNo]==6)hanno_p+=boguDataObj.fukaV2[boguNo]; //反応
else if(boguDataObj.fukaS2[boguNo]==7)maryoku_p+=boguDataObj.fukaV2[boguNo]; //知恵
↑のコードを変数名を変えずにスマートにまとめるにはどうしたらいいでしょうか。
0787デフォルトの名無しさん2011/08/25(木) 01:48:38.69
int n = boguDataObj.fukaV1[boguNo];
switch(boguDataObj.fukaS1[boguNo]) {
case 1: soubi_Kattack += n; break;
以下繰り返し
0788デフォルトの名無しさん2011/08/25(木) 01:50:55.94
変数名変えたくないなら新しく配列用意してそれに入れて
07897862011/08/25(木) 01:52:11.53
>>787
ありがとうございます。
swich自分から使ったことなかったけど
swichデビューすることにします。
07907862011/08/25(木) 01:56:28.46
>>788
ありがとうございます。
それは考えたのですが、コード量はあまり変わらない気がしました。
0791デフォルトの名無しさん2011/08/25(木) 02:07:32.82
>>786
今のあなたには switch の方がいいんだろうけど
こんなやりかたもある

int dummy; // 0 番は効果無しみたいな意味があるかも知れないので保険として用意
int *param_ptr[8]={&dummy, &soubi_Eattack, &soubi_Kattack, &tikara_p, ..., &maryoku_p}; // 添え字 7 以降にアクセスするとヤバイ

*param_ptr[boguDataObj.fukaS1[boguNo]]+=boguDataObj.fukaV1[boguNo];
*param_ptr[boguDataObj.fukaS2[boguNo]]+=boguDataObj.fukaV2[boguNo];
0792デフォルトの名無しさん2011/08/25(木) 02:19:17.37
newしたものをdeleteしなくてもプログラムが終了したらメモリ解放されるの?
実行と終了ずっと繰り返したがぜんぜん消費メモリ増えない
07937862011/08/25(木) 02:22:08.66
>>791
ありがとうございます。
こんなすごい方法思いつきませんでした。
今後の拡張性を考えてswichの方を使うことにします。
0794デフォルトの名無しさん2011/08/25(木) 02:26:08.84
>>792
今時のOSなら解放してくれる
0795デフォルトの名無しさん2011/08/25(木) 02:29:29.32
>>793
拡張する予定なら 関数化+switch使用 を薦める
0796デフォルトの名無しさん2011/08/25(木) 02:33:24.52
クラス設計からやり直せ
0797デフォルトの名無しさん2011/08/25(木) 02:43:31.99
int *addr(int ptn){
switch(ptn){
case 1: return &soubi_Eattack;
以下繰り返し
}
return &gomi;
}

:
gomi=0;
*addr(boguDataObj.fukaS1[boguNo]) += boguDataObj.fukaV1[boguNo];
*addr(boguDataObj.fukaS2[boguNo]) += boguDataObj.fukaV2[boguNo];
0798デフォルトの名無しさん2011/08/25(木) 02:59:34.91
GUIプログラミングってずっとループばっかじゃん
処理重くならないの?
0799デフォルトの名無しさん2011/08/25(木) 03:06:28.88
>>798
書き方による
GetMessage で待つようにしてれば問題ないレベル
08007862011/08/25(木) 12:02:52.81
>>797
ありがとうございます。
それで行きます。
0801デフォルトの名無しさん2011/08/25(木) 12:54:07.75
main関数の戻り値って何の意味があるんですか?
0802デフォルトの名無しさん2011/08/25(木) 13:26:13.12
意味があるように作れば意味がある
0803デフォルトの名無しさん2011/08/25(木) 14:15:16.16
>>801
DOSの時代だと、バッチファイルで受け取って分岐とかできてた。
unixとかでもシェルで同じような使い方できるんじゃないの。
0804デフォルトの名無しさん2011/08/25(木) 14:48:53.64
いまのWindowsでもsetup.exeがインストールに成功した/失敗したの判定に使ってる・・・かもしれん
0805デフォルトの名無しさん2011/08/26(金) 08:02:27.36
>>802-804
コマンドは全て戻り値返してるだろ。
適当に答えるなよ。
0806 忍法帖【Lv=39,xxxPT】 2011/08/26(金) 08:28:33.48
戻したコードに意味があるかは別の話だね。
0807デフォルトの名無しさん2011/08/26(金) 08:55:34.97
で?
0808デフォルトの名無しさん2011/08/26(金) 09:08:35.90
>>805
お大事に。
0809デフォルトの名無しさん2011/08/26(金) 22:54:52.58
switchとcaseにはcaseのところでインデントしないのが一般的なのですか?
0810デフォルトの名無しさん2011/08/26(金) 22:57:58.28
一般とかないので好きにしてください
0811デフォルトの名無しさん2011/08/27(土) 09:09:01.53
アセンブリだとオーバーヘッドないってうそだよね?
0812デフォルトの名無しさん2011/08/27(土) 09:32:42.64
オーバーヘッドの定義による
0813デフォルトの名無しさん2011/08/27(土) 17:48:59.52
long double つかうと値がおかしくなる
0814デフォルトの名無しさん2011/08/27(土) 21:02:23.00
VC++でコンソールプログラミングしているんだけど
閉じるボタン押されたときの処理ってどうなされているの?
0815デフォルトの名無しさん2011/08/28(日) 01:36:18.59
コンソールが閉じる
0816デフォルトの名無しさん2011/08/28(日) 12:23:19.48
アドレスを取れないビットフィールドの変数がconst参照で渡せるのが納得いかなくて、取得側でアドレスを調べてみたら、
共用体と全然違うところに、1ビットで連続する変数の間隔が12バイト開いてた。
const参照って通常の参照に制限をかけるものじゃなくて、中身をどこかにコピーしてるもんなの?
それなら値渡しとコストが変わらない冗長な記述なんじゃないのって思ったんだけど、何か違う?
0817デフォルトの名無しさん2011/08/28(日) 12:27:00.04
コンパイラの名前とバージョンは?
アドレスを見ようとするから、わざわざ用意してる可能性あり。
0818デフォルトの名無しさん2011/08/28(日) 12:42:05.09
そもそもどう渡したんだ?
struct X {
int y:1;
int const & get() {return y;}
}
とかだとgetの返却値はyをintにキャストした一時変数の参照だぞ。
0819デフォルトの名無しさん2011/08/28(日) 13:36:10.23
>>817
Microsoft Visual Studio 2005
Version 8.0.50727.762 (SP.050727-7600)
コンパイラ古すぎですかね・・・

>>818
こんな感じ

http://codepad.org/ktmIMdXZ
0820デフォルトの名無しさん2011/08/28(日) 16:30:11.82
>>819
そのソースだと>>818がいってるのと同じこと。

void foo(const int& a){ cout << &a << endl; }
foo(u.test.x); // ビットフィールドからintに暗黙変換されてその結果の一時変数が関数に渡される。
08218202011/08/28(日) 16:51:43.49
参考にこんなのも。
ttp://codepad.org/82YwrZx5
0822デフォルトの名無しさん2011/08/28(日) 17:31:02.61
なるほど、型名に惑わされていたようです。
分かりやすい解説ありがとうございました。
0823デフォルトの名無しさん2011/08/28(日) 20:04:22.75
>>821
へぇ。これはちょっと驚いた
0824デフォルトの名無しさん2011/08/28(日) 23:46:19.72
キャストして書き換えたらどうなるの
0825デフォルトの名無しさん2011/08/29(月) 01:16:54.10
あいまいな質問だな。自分で試して結果が理解できなければ改めて具体的に質問したら
0826デフォルトの名無しさん2011/08/30(火) 20:18:01.10
switch文ってcaseの後に↓のような感じで{}をつけてもいいんですか?
switch(a)
{
case 1:
{
文1;
文2;
}
break;
case 2:
{
文1;
文2;
}
break;
}
0827デフォルトの名無しさん2011/08/30(火) 20:24:39.60
>>826
えーよー
0828デフォルトの名無しさん2011/08/30(火) 20:55:20.42
>>827
ありがとうございます。
やってるの見たことなかったので何か不安だったので質問しました。
0829デフォルトの名無しさん2011/08/30(火) 21:17:02.89
変数宣言とかでそれが必須になることもある
0830デフォルトの名無しさん2011/08/30(火) 23:14:28.74
>>828
caseは単なるラベルなのでブロック構造とは無関係。
こんなのだって許される。

switch(a)
{

{
case 1:
文1;
文2;
break;
case 2:
;
}

{
文1;
文2;
}
break;
}
0831デフォルトの名無しさん2011/08/30(火) 23:37:54.49
>>830
こういう場合って{とcase 1:の間で変数宣言してもちゃんと処理されるの?そのとき代入も一緒にしてもいいのかな?
0832デフォルトの名無しさん2011/08/30(火) 23:53:52.81
宣言は処理される
代入は飛ばされる
caseのところへgotoしてるのと一緒
0833デフォルトの名無しさん2011/08/30(火) 23:54:16.93
質問じゃないけど、関数の引数に関数をアドレスで渡すことが今日判明した

世界が変わった気がした
0834デフォルトの名無しさん2011/08/30(火) 23:59:09.09
めくるめく高階関数の世界へようこそ
08358262011/08/31(水) 00:16:27.99
>>830>>832
今までswitch文がしっくりしてなかったけど
ラベルだって知って初めてしっくりきました。
0836デフォルトの名無しさん2011/09/01(木) 03:03:18.04
最近CからC++に移行したのですが、ある本を見るとmain関数の中にreturn 0;がありませんでした。
これは、「C++ではmain関数で戻り値を明示しなかった場合は0になる」という理解で合ってますか?
0837デフォルトの名無しさん2011/09/01(木) 05:21:07.95
あってます
0838デフォルトの名無しさん2011/09/01(木) 11:24:18.01
>>836
warning C4508: がコンパイルすると出るだろ?
0839デフォルトの名無しさん2011/09/01(木) 11:31:08.13
>>838
出ないよ
0840デフォルトの名無しさん2011/09/01(木) 11:33:34.61
>>838
int main(){}
をVC++2010でビルドしたところ、特に警告は出ませんでした。
環境によっては警告が出ることもあるのでしょうか?
そうだとすれば、やはり戻り値を明示した方が良いのでしょうか?
0841デフォルトの名無しさん2011/09/01(木) 11:43:59.30
838
VC6でした。
>>840
しなくていいよ.ボロコンパイラがwarnning出そうが知ったこっちゃない
0842デフォルトの名無しさん2011/09/01(木) 14:30:05.88
>>840
ISO/IEC 14882:1998でも↓このように定義されている。警告がでるうんこコンパイラなんて見たことがない。
もしかしてcfront? www

3.6.1 p5
A return statement in main has the effect of leaving the main function(destroying any
object with automatic storage duration) and calling exit with return value as the
argument. If control reaches the end of main without encountering a return statement,
the effect of executing
return 0;
0843デフォルトの名無しさん2011/09/01(木) 16:55:27.44
>>840
0以外の値を返したいなら書くしかない。
ただそれだけ。
0844デフォルトの名無しさん2011/09/02(金) 06:47:53.71
atan2の引数はなぜあのような順番になっているの?
0845デフォルトの名無しさん2011/09/02(金) 10:28:46.13
>>844
何かご不満でも?
0846ャfフォルトの名末ウしさん2011/09/02(金) 11:42:16.06
>>845
xy平面上に原点Oおよびそれと異なる点P(x,y)があるとき、x軸と半直線OPのなす角を求めたりするときに
atan2の引数の順番が逆になっていれば、点Pの座標をそのまま使ってatan2(x,y)と出来ると思うんですが
0847デフォルトの名無しさん2011/09/02(金) 12:06:36.79
atan3でも作ればいいじゃない
0848デフォルトの名無しさん2011/09/02(金) 12:14:25.93
>>847
そうじゃなくて、そもそものatan2が何故ああなのかが気になる
俺よりはるかに頭の良い人が作った言語なのに、理由もなく逆にしてるってのは多分ないと思うので
0849デフォルトの名無しさん2011/09/02(金) 12:22:43.93
普通の(下に延びるスタック)CPUなら、逆になってないだろ。
0850デフォルトの名無しさん2011/09/02(金) 12:30:26.65
tanがy/xだからyが先
0851デフォルトの名無しさん2011/09/02(金) 12:46:27.88
x>0 なら atan(y/x)==atan2(y,x) だから
0852デフォルトの名無しさん2011/09/02(金) 13:03:17.68
>>850-851
それぐらいの理由ならわざわざatan2を用意する必要も無いような……
と思ったら、atanとatan2では値域が違うんですね
(atanは数学的な逆正接関数と同じく-π/2〜π/2、atan2はx, yの符号に応じて-π〜πの値をとる)
これには何か意味があるんでしょうか?
>>846のような使い方では引数の順番が合わないので違うと思いますが……
0853デフォルトの名無しさん2011/09/02(金) 13:09:35.83
だから、y / xの順番なんだよ。xが0のときには重宝するぞ。
0854デフォルトの名無しさん2011/09/02(金) 13:13:39.91
>>852
バカは考えるな
0855デフォルトの名無しさん2011/09/02(金) 13:14:03.43
>>852
学校の勉強くらいしろよ
0856デフォルトの名無しさん2011/09/02(金) 13:18:41.04
>>853
そのような理由であれば、引数の順番については納得出来ます。
それでは、値域が-π〜πであるということにも何か理由があるのでしょうか?


>>854-855に関しては特にコメントはございません。
0857デフォルトの名無しさん2011/09/02(金) 13:20:33.81
バカはしゃべるなよ
0858デフォルトの名無しさん2011/09/02(金) 13:26:51.65
>>850-851と>>853は言ってることほとんど同じだろw
0859デフォルトの名無しさん2011/09/02(金) 13:51:22.90
>>856
直交座標→極座標
0860デフォルトの名無しさん2011/09/02(金) 14:19:19.81
>>859
846のような感じで、極座標における偏角を求めるのに使うということですよね?
その用途であればやはり変数の順番が逆の方が使いやすいのでは……

と堂々巡りになってしまうので根本的に考え直してみたのですが、
C言語においては、「直交座標をそのまま入れて偏角が出たら楽じゃん」という安直な考え方よりも、
「逆正接関数による偏角の求め方を知っている人からすると、atan(y/x)とatan2(y,x)でyとxの順番が違うとかえって混乱する」という考え方を採用している、
というだけなのでしょうか?
(実際、前者の考え方によってatan2を定義したと思われる言語もあるようです)

だとすれば、そもそもの疑問の持ち方がおかしかったですね……
それにもかかわらず答えていただきありがとうございました。
0861デフォルトの名無しさん2011/09/02(金) 15:00:55.05
直交座標の各成分に優劣はない
だからx, yの順に並ぶほうがいいなんてことを言う奴はアホ
0862デフォルトの名無しさん2011/09/02(金) 17:41:55.93
>>853のどこに納得できる理由があるのかわからないw
0863デフォルトの名無しさん2011/09/02(金) 18:23:04.80
N要素の組から各要素への射影関数の添え字集合は自然数だろ
自然数は順序数じゃん
なら順序数の定義にふくまれる関係<を優劣とすれば>>861の一行目の否定が証明できる
0864デフォルトの名無しさん2011/09/02(金) 18:26:00.71
仮定が間違い
不合格
0865デフォルトの名無しさん2011/09/02(金) 18:47:03.37
N次元デカルト空間は実数の直和で定義されてるから直交座標系上の点とNつ組は同型じゃん
0866デフォルトの名無しさん2011/09/03(土) 23:15:51.87
じゃないよ
0867デフォルトの名無しさん2011/09/03(土) 23:50:10.75
>>861
優劣がないならわざわざy, xの順にする必要ないよね
0868デフォルトの名無しさん2011/09/03(土) 23:56:02.83
優劣でなく順番に意味がある
0869デフォルトの名無しさん2011/09/03(土) 23:57:50.21
FORTRAN77からの伝統だからな。由来が知りたかったら爺さん探して聞くことだ。
0870デフォルトの名無しさん2011/09/04(日) 06:06:12.73
2重ループでまわすときも外をy内をxにすることがほとんどだし、
yが先なことにいちいち違和感もってたらやってけないだろ
0871デフォルトの名無しさん2011/09/04(日) 11:12:09.62
え?
0872デフォルトの名無しさん2011/09/04(日) 11:42:04.52
せやな
0873デフォルトの名無しさん2011/09/04(日) 11:50:15.24
>>870
何言ってんだこいつ
0874デフォルトの名無しさん2011/09/04(日) 12:38:27.29
fwriteで100バイト書きこむ
fseekで50バイト戻る
そこをEOFにしたい
結果としては50バイトのファイルができあがる

というようなことしたいんですが、
一旦100バイト書きこむとfseekで書きこみ位置戻しても関係無いんですね、
上記のようなことは可能ですか?
新しくファイル作リ直すしかないんでしょうか?
0875デフォルトの名無しさん2011/09/04(日) 12:45:03.84
>>874
ftruncate()が使えるかもしれませんが、標準関数だけなら作り直す以外ありません。
0876デフォルトの名無しさん2011/09/04(日) 12:51:56.50
>>875
回答ありがとうございます。
素直に作りなおすことにします
0877デフォルトの名無しさん2011/09/04(日) 12:53:21.12
上書きモードで50バイト書きこめばいいじゃん
0878デフォルトの名無しさん2011/09/04(日) 17:17:48.45
>>877
普通は、それを「作り直す」という。
0879デフォルトの名無しさん2011/09/04(日) 17:21:41.98
EOFを書きこむのはいいのか?
0880デフォルトの名無しさん2011/09/04(日) 17:23:35.81
EOFの書き込み方を具体的に説明してみろ。
0881デフォルトの名無しさん2011/09/04(日) 17:24:54.29
>>879
ハァ?
0882デフォルトの名無しさん2011/09/04(日) 17:28:03.19
>>880
>>881
無知
0883デフォルトの名無しさん2011/09/04(日) 17:44:24.83
ごめんなさい
0884デフォルトの名無しさん2011/09/04(日) 18:05:43.12
>>874
その場所で0バイトの書込みをするとtruncateしてくれるかも。
環境依存で良ければ試してみると良い。
0885デフォルトの名無しさん2011/09/04(日) 19:06:08.03
C言語を0から始めるのですが、お勧めのサイト・本があれば教えて下さい。
宜しくお願いします。
0886デフォルトの名無しさん2011/09/04(日) 19:09:41.91
K&R
0887デフォルトの名無しさん2011/09/04(日) 19:18:00.99
              「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得

                                ↓

     「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する

                                ↓

「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得

                                ↓

    「C言語によるオブジェクト指向プログラミング入門」 で実践的な大規模プログラムの作り方を学ぶ

                                ↓

          「C言語デバッグ完全解説」でバグに強いプログラムの記述法をマスター

                                ↓

                              神の誕生
0888デフォルトの名無しさん2011/09/04(日) 20:56:36.43
馬鹿の誕生の間違いだろ
糞本ばかりあげやがって
0889デフォルトの名無しさん2011/09/04(日) 20:57:11.74
ネタコピペにマジレスするなよ
0890デフォルトの名無しさん2011/09/04(日) 21:00:13.61
マジレスすると、大きめの本屋で立ち読みして肌に合ったものを選ぶのが一番
他人が分かりやすいからといって、自分が分かりやすいとは限らない
本の語り口調が肌に合わないとか色々あるしな
0891デフォルトの名無しさん2011/09/04(日) 21:09:44.03
洋書買え
大学のサイト見れ
0892デフォルトの名無しさん2011/09/04(日) 23:22:15.33
参照とconst参照で大体書けてしまうので、値渡しとポインタ演算をほとんど使わなくなったのですが、何か問題あったりしますか?
0893デフォルトの名無しさん2011/09/04(日) 23:25:52.16
それで書けてるんなら問題ないんじゃないかな
0894デフォルトの名無しさん2011/09/04(日) 23:39:53.84
>>893
ありがと、了解です。
0895デフォルトの名無しさん2011/09/05(月) 00:11:25.21
>>884
pgr
0896デフォルトの名無しさん2011/09/05(月) 00:34:33.69
>>880
0897デフォルトの名無しさん2011/09/05(月) 01:37:58.51
fscanf関数の書式指定子について質問です。
csvファイルの中身が
1201011099,名無し 太郎,ななし たろう,03-1234-5678
1201011100,名無し 花子,ななし はなこ,06-1234-5678
とあるんですが
fscanf(ReadFp2, "%d, %[^,]s", &i, &str);
でループさせたとき2回目のループでエラーが出るので、フォーマット指定子で%[^,\n]sと%[^,\r\n]としても
エラーで読み込むことができませんでした
番号と名前だけ変数に取るにはどうすればいいですか?
0898デフォルトの名無しさん2011/09/05(月) 01:44:08.33
%[^,]s
こんな書き方あったっけ?
0899デフォルトの名無しさん2011/09/05(月) 01:45:52.10
> 2回目のループでエラー
って"ふりがな"と"電話番号"を (2回目の) &i, &str に格納しようとしているからでそ?

> 番号と名前だけ変数に取る
まず fgets() とかで1行読んだものを sscanf()で取り出す、とか?
0900デフォルトの名無しさん2011/09/05(月) 01:52:55.05
> こんな書き方
ウィキペディアに解説があったよw
0901デフォルトの名無しさん2011/09/05(月) 03:49:56.86
>>899
ありがとうございます
それでできました。
0902デフォルトの名無しさん2011/09/05(月) 08:27:47.27
つーか、文字群指定にsは要らんがな。
つまり、"%[^,]"でいい。
0903デフォルトの名無しさん2011/09/05(月) 22:24:40.98
foo(const Point &point)
foo(Point &point)
の違いを教えて下さい。
Point p(0.0, 2.0);
foo( p );
と上の関数だけしか定義してないときに,foo( p )を渡したら,
no matching function for callってコンパイラに怒られました。
foo( Point(0.0, 2.0) );
とコンストラクタで一時オブジェクトを渡すと通りました。
2つの違いをどなたか御教授下さいませ。
0904デフォルトの名無しさん2011/09/05(月) 22:54:36.19
>>903
落ち着いてもう一度試してみたら?
0905デフォルトの名無しさん2011/09/05(月) 23:17:27.25
一時オブジェクトはconst参照でしか束縛できないので通るが
普通の変数はどっちでも束縛できるのでどっちを呼べばいいんだよって文句言われる
0906デフォルトの名無しさん2011/09/05(月) 23:28:40.21
普通の変数ならconstじゃ無いほうがえらばれる >>905
0907デフォルトの名無しさん2011/09/06(火) 00:44:49.38
>>904
落ち着いて、よく見直したらpの型(position)を間違えてました。もう一回ためしたら動きました。
ごめんなちゃい。
0908デフォルトの名無しさん2011/09/07(水) 00:57:25.53
例外に関してよく分からないことがあるので質問させてください。
今、
try {
  ...
  throw Exception(...);
} catch (Exception& ex) {
  ...
};
のようなコードがあるとき、例外オブジェクトはどこに作られるのでしょうか。
普通に考えればtry節の中は、
  Exception ex;
  ...
  throw ex;
  
と同じ(テンポラリオブジェクトにおける最適化はこの際おいておく)ですから、
exはスタック上に作られることになると思います。
それでも、その外側のスコープで&を捕まえられると言うことは、throw の引数は、
暗黙のうちにどこかにコピーされるものと考えられますが、それでよろしいでしょうか。
書籍は「投げられる」とばかり書かれていて要領を得ません。

それで良い場合、作られる場所がスタックやヒープ状では問題が起こりそうです。
グローバル領域ですとcatchブロックをさかのぼっている最中に発生した例外で問題が起こりそうです。
そこから推察するに、システムが予めスレッドローカルなメモリを確保していて
そのメモリ内にコピーが作成されるように思われます。またそのメモリは2重例外で問題が起きないよう、
なんらかの管理が行われているものと想像できますが、その認識でよろしいでしょうか?

また、これらの動作は、(コンパイラの)実装依存なのでしょうか。
こういった疑問を検索できる文書へのポインタがあれば併せて教えていただけるとありがたいです。
0909デフォルトの名無しさん2011/09/07(水) 01:36:54.39
>>908
例外はコピーが作られる
0910デフォルトの名無しさん2011/09/07(水) 17:34:48.51
みんなはCでTDDどうやってる?
0911デフォルトの名無しさん2011/09/07(水) 23:33:43.24
CとC++でなんか違うの?
0912デフォルトの名無しさん2011/09/07(水) 23:47:50.21
>>911
cが人間で、c++は触手やら色々の生えたパワードスーツ

基本、cとしても使えるけど、拡張部分使うと強力になる
が、時々触手が言う事を聞かなくなる
0913デフォルトの名無しさん2011/09/07(水) 23:50:53.89
他人のC++は読みたくないが
自分で書くならCよりC++
0914デフォルトの名無しさん2011/09/08(木) 14:09:33.80
みんなはCでTDDどうやってる?
0915デフォルトの名無しさん2011/09/08(木) 15:04:19.19
CとC++でなんか違うの?
0916デフォルトの名無しさん2011/09/08(木) 15:11:04.29
名前が違う
0917デフォルトの名無しさん2011/09/08(木) 15:11:06.17
ブロックにいちいちコメントつけてるような奴はオブジェクト指向を解ってないとか言って
C++でブロックをやたらメンバ関数にする人がいるんだけど、実際どうなの?

確かに全体の流れは読みやすくなるけど、1度しか呼び出さない、
しかもメンバ変数を弄くり回してるようなルーチンを関数にするのって、危なくて気持ち悪いよね。
ヘッダの行数も凄いことになってたけど、共同作業じゃああいうのが喜ばれるのかな。
0918デフォルトの名無しさん2011/09/08(木) 15:20:46.23
メンバ関数ではやらないけど関数化は1度きりでも効果あるだろ
不要な変数に触らないで済むし、エディタの折りたたみ機能を使わなくてもコードが見やすい
0919デフォルトの名無しさん2011/09/08(木) 16:05:53.00
>>917
それオブジェクト指向ちゃう。構造化プログラミングや。
って反論すれば良いと思うよ。
こういうのは1度しか呼び出さないかどうかが問題なんじゃなくて、
変数のスコープをうまく制限して部分部分の構造をすっきりさせるのが良い。
0920デフォルトの名無しさん2011/09/08(木) 16:55:11.24
安全性を気にするのはいいけど、そもそもこういうことすら出来てしまうものだし
そんなことまでいちいち気にしていたらキリがない。
せいぜい自分のコードをアホに弄らせないこと。

http://codepad.org/mg9U6rsu
0921デフォルトの名無しさん2011/09/08(木) 17:07:11.32
出来るのとついやってしまうのでは全然違うだろう
関数化はついやってしまうのを防げるからなるべくやったほうがいい

0922デフォルトの名無しさん2011/09/08(木) 17:12:24.68
>>920
constを付けてると却って馬鹿みたいに見えるな
0923デフォルトの名無しさん2011/09/08(木) 19:48:58.24
関数化することで処理に名前が付くのも良い
コメントを書いてるのと同じ意味になる
もちろんhoge()とか付けたら意味内が
0924デフォルトの名無しさん2011/09/09(金) 05:04:50.97
構造化はソースコードが見やすくなるだけで幸せ。
0925デフォルトの名無しさん2011/09/09(金) 09:24:40.80
みんなはCでTDDどうやってる?
0926デフォルトの名無しさん2011/09/09(金) 09:25:38.03
>>925
その質問飽きた。
0927デフォルトの名無しさん2011/09/09(金) 09:27:07.18
Cやアセンブラで間に合うような分野なら
テストみたいな生ぬるいものじゃなくてそれこそ形式手法使ってるだろうな
0928デフォルトの名無しさん2011/09/09(金) 14:41:19.84
>>926
回答してやれよ
0929 忍法帖【Lv=40,xxxPT】 2011/09/09(金) 16:41:35.40
答えられないから飽きるんだよw
0930デフォルトの名無しさん2011/09/09(金) 16:54:08.57
int func(a, b, c) int a, b, c ; { printf("%d, %d, %d", a, b, c); return 0; }

int main() { return func(1, 2, 3); }

C++ではできないのはなんで?
こっちのほうがコードが綺麗に書けると思うんだけど
0931デフォルトの名無しさん2011/09/09(金) 16:55:12.04
古い書き方だから
0932デフォルトの名無しさん2011/09/09(金) 17:23:52.83
>>930
>int a, b, c ;
無駄
0933デフォルトの名無しさん2011/09/09(金) 23:28:43.94
dllライブラリ作ってるんですけど、初期化が必要な場合
グローバルな関数を呼び出しさせるのか、インスタンス作らしてメンバ呼び出すのかどちらがいいでしょうか
0934デフォルトの名無しさん2011/09/09(金) 23:32:23.30
>>933
アタッチ時に初期化できるでしょ
09359332011/09/09(金) 23:35:55.56
あぁ、勘違いした
DLLに限ったことじゃないしお好みでいいと思うよ
0936デフォルトの名無しさん2011/09/09(金) 23:42:12.19
>>933
DLLの中身による。
0937デフォルトの名無しさん2011/09/10(土) 17:47:09.98
ありがとうございます

>>935
>>936
0938デフォルトの名無しさん2011/09/10(土) 19:08:12.36
>>917
メンバ変数をクラス内グローバルだとか、関数内での動きが見えないとかと
病的に嫌って引数と戻り値だけでやりとりしていた人がいたけど
もはや何の為にクラス使ってんのって話だよ。
0939デフォルトの名無しさん2011/09/10(土) 21:36:20.08
みんなはCでTDDどうやってる?
0940デフォルトの名無しさん2011/09/10(土) 21:41:02.65
>>939
その質問飽きた。
0941デフォルトの名無しさん2011/09/14(水) 02:31:17.05
>>938
int value1 = 0;
float value2 = 0.0f;
value2 = Henkou(value1);
内容は暗いまでも、式を見れば、int型の値を利用してfloat型の値を返す関数だと分かる。
Henkou100まで追加されても流れを追うことが可能。

Henkou();
実はメンバ変数value1,value2を同じように動かしているが、呼び出し側からは何を変更しているのか全く分からない。
Henkou100を追加するまでに値を見失うこと必至。

privateだからと甘えたソースの多いこと多いこと。
関数を細切れにするのなら、尚のことメンバ変数経由の値変更なんてするものじゃないと思ってる。
0942デフォルトの名無しさん2011/09/14(水) 02:46:18.08
> 呼び出し側からは何を変更しているのか全く分からない

呼び出し側から何を変更しているのかいちいち気にしなきゃならないなんて
クラスにした意味無いじゃんw


> 関数を細切れにする
これも意味不明
0943デフォルトの名無しさん2011/09/14(水) 03:06:45.41
class Hoge{
private:
int i;
void Foo1();
void Foo2();
public:
Hoge():i(0){}
virtual ~Hoge(){}
};

void Hoge::Foo1(){
for(; i<10; ++i){ cout<<"a"<<endl; }
}

void Hoge::Foo2(){
for(; i<20; ++i){ cout<<"b"<<endl; }
}

極端な話、こういうバカを懸念しろってことか?
0944デフォルトの名無しさん2011/09/14(水) 03:15:00.08
int Hoge_Foo1_i = 0;
int Hoge_Foo2_i = 0;
struct Hoge{
static void Foo1();
static void Foo2();
};
これでおk。
0945デフォルトの名無しさん2011/09/14(水) 03:25:59.77
>>942
忘れた頃にクラスの仕様を変更しろって言われたらどうすんの?
どこで何が変わっているのかも気にしないで、またバカみたいにメンバの変更箇所を探すの?
0946デフォルトの名無しさん2011/09/14(水) 03:30:13.31
どっちにしろ変更箇所を探さないといけないのは当たり前だろ
0947デフォルトの名無しさん2011/09/14(水) 03:36:25.88
そんな考え方で安易にグローバル変数を量産されたら困るんだよ。
0948デフォルトの名無しさん2011/09/14(水) 03:37:48.10
メンバ変数の話じゃなかったのか・・・
0949デフォルトの名無しさん2011/09/14(水) 03:42:41.58
メンバ変数ってのは、クラス内のどこからでも変更可能なわけで。
0950デフォルトの名無しさん2011/09/14(水) 03:54:55.54
どんだけ病的なんだ
0951デフォルトの名無しさん2011/09/14(水) 04:11:11.39
>>945
>>949
初歩的な事さえ理解できていないのに
優劣を語る資格はないよ
0952デフォルトの名無しさん2011/09/14(水) 04:15:29.09
>>951
そうやって逃げ続けてるから、いつまで経っても人に迷惑のかかるコードしか書けないんだよ。
0953デフォルトの名無しさん2011/09/14(水) 04:26:50.11
コードなんて書いたことすらないグーグル勢だろ
>>943を見てブロックを超える広域変数は普通にヤバいと思ったわ
0954デフォルトの名無しさん2011/09/14(水) 04:32:45.16
>>951
privateでもクラス内でグローバルだよ
constと勘違いしてない?
0955デフォルトの名無しさん2011/09/14(水) 04:51:39.45
スレを閉じて枕に突っ伏しているのか、反論を必死に検索中なのか知らんが、
自分で考える力も無いのに聞いたような話で水を差すのはどうかと思うねw
0956デフォルトの名無しさん2011/09/14(水) 04:53:38.85
オブジェクト指向なんてクソだと思ってるオレでも
941がパラダイム未修得のトーシロと判断するわ
0957デフォルトの名無しさん2011/09/14(水) 04:59:17.18
お、なんかそれっぽい言葉を見つけてきたみたいだねw
反論としては全く機能していないけど。
添削してあげるからまずはコードを書いてみ?
0958デフォルトの名無しさん2011/09/14(水) 05:31:18.49
30分も与えられて簡単なクラス1つ書けねーのか。
ゴミにも程がある。
0959デフォルトの名無しさん2011/09/14(水) 06:43:17.13
>>951
お前が分かってないじゃん
どこにアンカ付けてんの?
0960デフォルトの名無しさん2011/09/14(水) 06:54:59.06
とりあえず否定しておけば、誰かが何か言ってくれるとでも思ったのでしょうよ。
馬鹿な上に、甘ったれ。
おそらく学生だろうが、それ以前に人間として話にならん。
0961デフォルトの名無しさん2011/09/14(水) 07:33:13.86
お前らこんなくだらないことで盛り上がれて楽しそうだな。
0962デフォルトの名無しさん2011/09/14(水) 08:22:40.55
というかメンバ変数絞って使うのは常識でないの。
何があろうと一切使わない、は病的だけど。
0963デフォルトの名無しさん2011/09/14(水) 13:41:00.08
うむ。2chは肥溜めということがよくわかる良い議論であった。皆の者もう下がって良いぞ
0964デフォルトの名無しさん2011/09/14(水) 14:23:28.68
>>963
馬鹿
0965デフォルトの名無しさん2011/09/14(水) 14:44:27.92
>>964
アホ
0966デフォルトの名無しさん2011/09/14(水) 14:48:25.67
>>965
まぬけ
0967デフォルトの名無しさん2011/09/14(水) 15:01:23.35
>>966
uy
0968デフォルトの名無しさん2011/09/14(水) 15:01:23.72
>>966
とんま
0969デフォルトの名無しさん2011/09/14(水) 15:02:21.78
>>964-968
うむ。2chは肥溜めということがよくわかる良い流れであった。皆の者もう下がって良いぞ
0970デフォルトの名無しさん2011/09/14(水) 20:14:24.00
>>954
> >>951
> privateでもクラス内でグローバルだよ
ちょっと方言がきつくて何言ってるのか分かんないから
http://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/c++2003std.pdf
3.3.5 Namespace scop
3.3.6 Class scope
ここをざっと読んだ後に標準語で話してもらえないか?
0971デフォルトの名無しさん2011/09/14(水) 20:23:24.37
普通に言ってること分かるけど
アスペ?
0972デフォルトの名無しさん2011/09/14(水) 20:27:34.76
次スレよろしく
0973デフォルトの名無しさん2011/09/14(水) 20:33:49.86
>>980
0974デフォルトの名無しさん2011/09/14(水) 20:40:47.35
で、結論は?
0975デフォルトの名無しさん2011/09/14(水) 20:46:42.03
お前らはうんこ
0976デフォルトの名無しさん2011/09/14(水) 20:49:11.88
>>962でFA.
引っ張るようなレベルの話ではない.
続きは宿題スレでどうぞ.
0977デフォルトの名無しさん2011/09/14(水) 21:05:28.72
何仕切ってんだテメー
0978デフォルトの名無しさん2011/09/14(水) 21:07:26.65
やんのか?ああ?
0979デフォルトの名無しさん2011/09/14(水) 21:28:58.82
いいぜ表出ろや
0980デフォルトの名無しさん2011/09/15(木) 00:15:48.92
>>1-979
うむ。2chは肥溜めということがよくわかる良い流れであった。皆の者もう下がって良いぞ
0981デフォルトの名無しさん2011/09/15(木) 00:18:28.00
スレを勃てるまでもないC/C++の質問はここで 20
http://hibari.2ch.net/test/read.cgi/tech/1316013463/
0982デフォルトの名無しさん2011/09/15(木) 00:24:55.50
最近C++の本を買って来たのですが、家に帰ってくるとくたびれてしまいその本を読む前に寝てしまうのですがどうすれば良いですか?
0983デフォルトの名無しさん2011/09/15(木) 00:26:00.35
その本を枕に眠ればいいと思うよ
0984デフォルトの名無しさん2011/09/15(木) 00:34:40.19
試しに使ってみたら案外寝心地が良かったので、これからは枕として活用したいと思います
ありがとうございました。
0985デフォルトの名無しさん2011/09/15(木) 00:53:55.38
そんなんじゃ、お先真っ暗だな。
レス数が950を超えています。1000を超えると書き込みができなくなります。