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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2011/06/15(水) 19:46:56.63
      / ゙゙゙̄'''===―--、、、_   _,                _ -==''  ̄ ̄ ̄`ヽ
           ,-=―--、、,,,.―-  ̄ ̄        ヽ√ ̄ ̄ニ ̄-‐  _ィ-‐= 、
         彡'"  /o 三 `ヽ`ミ、ヽ              '´ ,.彡=''"" ̄    `゙ミ
            {  (⌒)  }  ヽ{              "  {  (⌒)  ,l
            丶、  ゙ ノ                     ヽ     ノ
              ー-- ' ,. 彡〃              、、 、_ー-- ´
          丶ミ=-='''"´                   ヽヽヽヽ ̄三=―彡
                            /         /  ハ   
        / / / / ハ / ヽ ヽ ヽ                     / ヽ  ヽ ヽ   
 


                         / ̄ ̄ \
3デフォルトの名無しさん:2011/06/15(水) 19:54:34.28
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリリッ
4デフォルトの名無しさん:2011/06/16(木) 13:47:58.33
C/C++って言語仕様ではマルチスレッドって非対応ですよね?
C/C++でのマルチスレッドプログラムのいい参考図書とかないですか?
5デフォルトの名無しさん:2011/06/17(金) 20:52:41.40
矢印キーが押されたかどうかを判定する関数を教えてください
6デフォルトの名無しさん:2011/06/17(金) 21:00:19.42
>>5
windowsならWM_KEYDOWNイベントを監視すれば
75:2011/06/17(金) 21:05:15.33
>>6
回答ありがとうございました。
スレッドを移動するため>>5を撤回します。
8デフォルトの名無しさん: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をインポートライブラリとして使用しているので
これが原因だったりしないかなーと思ったりしますが確証なしです。

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

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

128:2011/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()戻り値の正負が逆に判定される
 →このとき二分探索で最後まで探しても文字列が見つからずエラーとなる。
138:2011/06/18(土) 22:29:57.85
>>9

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

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

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

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

というエラーメッセージが出てしまいます。
教えてください。
17デフォルトの名無しさん:2011/06/19(日) 00:04:02.41
クラスのメンバ関数宣言時に
static メンバ関数ってやればいいよ
188:2011/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])){
19デフォルトの名無しさん: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));

20デフォルトの名無しさん:2011/06/19(日) 01:15:32.92
DirectShowのFilterGraphみたいなGUIを作りたいんですが、何か簡単な方法ないですか?
フォームアプリケーションだと難しそうで
21デフォルトの名無しさん: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
22デフォルトの名無しさん:2011/06/19(日) 02:18:33.58
>>17
ありがとうございます。
23デフォルトの名無しさん:2011/06/19(日) 05:34:43.91
アルゴリズムの質問になっちゃうけど、ダイクストラってa→bとb→aへのコストが
違っても普通のダイクストラ法でちゃんと動く?
24デフォルトの名無しさん:2011/06/19(日) 17:41:10.53
3要素のchar *の配列の参照はどのように記述すればよいでしょう?
↓これをtypedefせずに一文で書きたい。

typedef char *arr[3];
arr& a;
25デフォルトの名無しさん:2011/06/19(日) 18:22:07.82
char *(&a)[3];
26デフォルトの名無しさん:2011/06/19(日) 19:43:04.67
ありがとう。えぐいですね。それを返す関数は、あーでもないこーでもないとやった結果
char *(&a())[3];
とさらにえぐかったです。
27デフォルトの名無しさん:2011/06/19(日) 21:16:42.17
typedefサンッぱねえっす
28デフォルトの名無しさん: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); // アクセス違反のエラー。

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

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

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

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

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

例:
size_t length() const;
53デフォルトの名無しさん:2011/06/22(水) 20:44:38.06
>>52
なるほど。丁寧な解説ありがとうございます。
54デフォルトの名無しさん: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に埋め込まれるとか。
(いや、ほんとにそんな変な名前になるとは思わないけど、例えば。)
55デフォルトの名無しさん:2011/06/22(水) 23:41:38.91
0のものを1にするのに
インクリメントと1代入どっちが速いの?
56デフォルトの名無しさん:2011/06/22(水) 23:54:52.44
速度は実測が基本
57デフォルトの名無しさん:2011/06/22(水) 23:57:16.17
どっちかが速かったにしろ、
++と、+=1(リテラルの1を加算)だったら、
コンパイラが速いほうに統一してくれるだろ。
58デフォルトの名無しさん:2011/06/23(木) 00:47:37.65
::だったり.だったり->だったり頭がはげそう
59デフォルトの名無しさん:2011/06/23(木) 00:48:11.02
おそらく、1代入だろうな。
1加算は、メモリからのロード、加算、ストアのステップが必要。
1代入はリテラルをストアするだけ。
60デフォルトの名無しさん:2011/06/23(木) 09:21:04.41
ボトルネックになるまではそんな細かいことを気にするだけ無駄
意味的に読みやすいほうを選択するべきだろう
61デフォルトの名無しさん:2011/06/23(木) 11:14:12.80
if(a){
if(b){
処理
}
}
if(a&&b){
処理
}

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

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

つーか、大した量だよw
67デフォルトの名無しさん:2011/06/23(木) 12:20:41.03
>>47
C++0xより前では連続性は保証されていない
ただ、普通に触れる処理系ならまず大丈夫なので気にする必要はない(0xより前の古いものでも大丈夫、つかダメなの聞いたことがない)
可変長なのに連続しているのは単に現在確保してるメモリを超えるなら確保しなおしてるだけだよ
68デフォルトの名無しさん:2011/06/23(木) 12:23:35.50
40秒が連結の処理のせいでかかってる時間とは思えないから
単に端末の問題じゃ?fputsコメントアウトしたら一瞬で終わるか?
69デフォルトの名無しさん:2011/06/23(木) 12:23:46.38
おなかがすいたんだがどうすりゃいいの?
70デフォルトの名無しさん:2011/06/23(木) 12:24:23.20
メモリ不足じゃよ
71デフォルトの名無しさん:2011/06/23(木) 12:33:19.17
確かに。2GBの配列でメモリスワップしてたり。
5000行持つのを諦めるとか、可変長にするとかしないと根本解決にならない気が。
72デフォルトの名無しさん:2011/06/23(木) 13:14:09.19
2GBを「大したデータ量ではない」とか、すごい時代になったもんだ。
7363:2011/06/23(木) 13:37:09.99
色々なご意見ありがとうございます。
fputsを減らさないと重くなる と先入観が有ったのですが、
strcatを全部消してfputsだけにしたら2秒弱で終わりました;
時と場合でやり方は変えないとだめなんですね。 ありがとうございました。
7463:2011/06/23(木) 13:42:02.48
2GB・・・2MB・・?(´・ω・`)
75デフォルトの名無しさん:2011/06/23(木) 14:50:15.98
1K=1000として
5000 * 800 * 500 = 2,000,000,000 = 2,000,000K = 2,000M = 2G
76デフォルトの名無しさん:2011/06/23(木) 14:57:55.58
7763:2011/06/23(木) 19:07:13.11
2Gも使う事になってたんですね・・orz
でもタスクマネージャの稼動中のプロセス見ても100KBすらメモリ使っていない・・。
扱うファイルが10〜300KBくらいだと全部メモリ確保しないのかな・・なんでだろう・・。(´・ω・`)
78デフォルトの名無しさん:2011/06/23(木) 20:09:47.79
仮想メモリ
7963:2011/06/24(金) 23:43:56.48
大き過ぎるから仮想メモリに確保されている・・? んですね。 ありがとうございました。
80デフォルトの名無しさん:2011/06/25(土) 21:48:20.84
映像のフレームを定期的に処理するプログラムを作っています。
たとえば30fpsですと33.33ミリ秒周期なので処理間隔を33ms or 34msにして1秒間あたりの
処理フレームが設定どおりにしたいと考えています。
で、間隔を33msにするか34msにするかというところの処理を書いてみたのですが、
もう少し良い書き方が無いものかご教示お願いします。
8180:2011/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++;
 }
}
8280:2011/06/25(土) 21:51:37.84
何度もすいません。
fps値と入力映像の時間は外から与えるようにする予定です。
83デフォルトの名無しさん:2011/06/25(土) 22:18:42.02
何度も糞レスしやがって!
ゲーム小僧死ねよ
84デフォルトの名無しさん:2011/06/25(土) 22:21:26.65
コーディングにセンスないね君。プログラミング止めたほうが良いよ
85デフォルトの名無しさん:2011/06/25(土) 22:25:17.83
こんなスレにセンスあるやるいるのか?
86デフォルトの名無しさん:2011/06/25(土) 22:31:24.24
センスは相応の努力をすればある程度磨けるはずなので、それをもって止めた方がよいというのはおかしい
87デフォルトの名無しさん:2011/06/25(土) 22:31:31.68
^を付けされる意味って?
88デフォルトの名無しさん:2011/06/25(土) 23:28:09.65
>>87
日本語でOK
8980:2011/06/25(土) 23:32:27.28
>>83-84
拙いコードで恐縮です。
ゲームではありません。
センスが無いのは承知しておりますが
他に食べ方を知らないのです。
申し訳ないですがご教示願えれば幸いです。
90デフォルトの名無しさん:2011/06/25(土) 23:43:34.81
食ってるとまで言うかねえ?
2ちゃんでそれを聞くような人が。
9180:2011/06/26(日) 00:17:41.15
>>90

「食べてる」というのは偉そうな書き方でしたでしょうか?
転職するあてもないという意味です。
92デフォルトの名無しさん:2011/06/26(日) 00:26:15.12
これがカーナビあたりの組み込み系SEの実態か?
9380:2011/06/26(日) 00:30:14.90
よろしければ女の食べ方もご教示願えれば幸いです。
94デフォルトの名無しさん:2011/06/26(日) 02:52:21.20
今まで普通に動いていたプログラムが急に動かなくなってしまいました
問題の箇所は、普通にファイルをオープンしているだけなのですが・・・
std::ifstream(filename);
プログラムがここにきたときに強制終了してしまいます。
なぜなのでしょうか・・・
QtCreatorで開発しています
95デフォルトの名無しさん:2011/06/26(日) 03:03:33.81
☓ QtCreator

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

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

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

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

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

謎が解けました.
解説ありがとうございました.
122デフォルトの名無しさん: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;
}
123デフォルトの名無しさん:2011/06/27(月) 20:19:48.10
韓国語が標準の環境、韓国で売っているC++を使うとうまくいくと思う
韓国語Winと韓国語VCでどうぞ
124デフォルトの名無しさん:2011/06/27(月) 21:14:46.55
別に韓国語限定じゃなくて、中国やロシアとか色々な言語に対応したいんだ
というか、その国向けの開発環境じゃなきゃ出来ないとかあるはずないよね
125デフォルトの名無しさん:2011/06/27(月) 21:40:09.92
unicodeつかう
126デフォルトの名無しさん:2011/06/27(月) 22:02:06.16
使用者の知能によりけり
127デフォルトの名無しさん:2011/06/27(月) 22:12:17.66
>>125
charで書き込み(読み込み)したいんですよ。
128デフォルトの名無しさん:2011/06/27(月) 22:14:01.12
文字列型使えよ
129デフォルトの名無しさん:2011/06/27(月) 23:55:46.00
char *hoge[]

char hoge[]
の違いがわかりません
130デフォルトの名無しさん:2011/06/27(月) 23:57:31.22
>>125
ありがとう、いろいろ調べてるうちにそのほれにたどり着いたけど、処理超面倒だね
>>128
文字列型ってstring?unicodeで使ったらまともに動作しなくね?
131デフォルトの名無しさん:2011/06/28(火) 00:02:56.19
>>129
char *hoge[255]みたいな宣言だとすると
*hoge[255]=*hoge×255
hoge[255]=hoge×255
132デフォルトの名無しさん:2011/06/28(火) 00:03:51.93
>>130
TCHR
あたりで
133デフォルトの名無しさん:2011/06/28(火) 00:04:46.35
>>131
ちがうよ
134デフォルトの名無しさん:2011/06/28(火) 00:06:13.53
>>131
>>133
どうなんですか?
135デフォルトの名無しさん:2011/06/28(火) 00:17:06.46
クラスClの構造体Stのポインタを
別のヘッダーファイルで使用するため、
前送り宣言したい
(struct Cl::St;みたいな)
何かいい方法ない?
136デフォルトの名無しさん:2011/06/28(火) 00:44:27.39
>>122
imbue()しなきゃだめだろ
処理系が韓国語に対応してるか調べてみ
無理ならgccのeucで試してみるとか
137デフォルトの名無しさん:2011/06/28(火) 00:48:23.40
>>131
オマエのレスをつい最近見た事があるぞ
138デフォルトの名無しさん: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;


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

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

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

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

行末ならgetlineで問題ないですが・・・
145デフォルトの名無しさん:2011/06/28(火) 07:16:00.73
あなたが何をもってして文末を判定するかじゃないのかい
146デフォルトの名無しさん:2011/06/28(火) 08:01:39.06
ファイルの最後と文末は違うぞ?
147デフォルトの名無しさん: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を超えるとリセットされず無限に増え続けるようになります
何が問題なのでしょうか?
148デフォルトの名無しさん:2011/06/28(火) 09:04:10.59
[チェック関数]が2以上を返すとchkがインクリメントされるのだから、[チェック関数]がおかしいんだろう。
それ以前にchk0=check();がループの外に出てるんだけど?
それ以前にコンパイ(ry
149デフォルトの名無しさん:2011/06/28(火) 09:06:11.76
関数checkは1回しか呼ばれていないのに増え続けるとな?
150デフォルトの名無しさん:2011/06/28(火) 11:22:27.10
>>138
関数の仕様がおかしいんじゃね?
グローバル変数を使う位なら引き数要らないだろ。
つーか、グローバル変数を使う積極的理由がない。
例えば、関数1の中でageその他に触れたいなら、
・ageその他を構造体に纏めて参照渡しにする。
・ageその他を構造体に纏めてポインタ渡しにする。
・ageその他を構造体に纏めて引き数で渡して戻り値で受け取る。
の三択でいいよ。
151デフォルトの名無しさん:2011/06/28(火) 17:08:29.67
なんでC/C++はスレッドライブラリが標準でないんでしょうか。
標準であればもっとわかりやすいと思うんですが。
152デフォルトの名無しさん:2011/06/28(火) 17:11:45.53
環境に依存するから
153デフォルトの名無しさん:2011/06/28(火) 17:12:01.72
0xでstd::thread入ったじゃん
154デフォルトの名無しさん:2011/06/28(火) 17:19:21.97
boost::thread「ワイが面倒みてやるで」
155デフォルトの名無しさん:2011/06/28(火) 17:21:35.02
最適化の抑制をどうすればいいのかわからん
156デフォルトの名無しさん:2011/06/28(火) 17:48:55.47
文字列『0 1 3 1 0 3 2 1 3 0』みたいな変動するデータがあるとして
それをsscanf系で配列に格納したいのですが
スマートなコードの書き方ってないですか?
157 忍法帖【Lv=12,xxxPT】 :2011/06/28(火) 17:49:23.05
>>155
つ[volatile]
158138:2011/06/28(火) 17:50:45.96
>>150
確かにグローバル変数をつかっているのに引数はおかしな話でした。

まとめて渡すとなると

struct hito{
age
sex
no
}

struct hito eigyo[10];

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

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

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

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

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

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

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

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

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

インターフェース関連のマウス位置はこれで範囲指定するのが定番なのかな・・・?
170デフォルトの名無しさん:2011/06/28(火) 23:14:26.01
>>169
プラットフォーム、使用ライブラリ等でいくらでも変わってくると思われ
171デフォルトの名無しさん:2011/06/29(水) 01:54:29.00
ダウンキャストってなぜいけないんです?
172デフォルトの名無しさん:2011/06/29(水) 02:02:17.44
静的な保証がなくなる
173デフォルトの名無しさん: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

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


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

スルーしてください
177デフォルトの名無しさん:2011/06/29(水) 04:46:18.17
これがゆとりか
178デフォルトの名無しさん: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
}

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


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

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

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

普通に

func(){
bbb.x
bbb.y
}

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

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

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

(一応typeidしたときのname()も違うが)
188178:2011/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()をヘッダーファイルに表記すると動作しなくなってしまって

189デフォルトの名無しさん:2011/06/29(水) 09:35:42.12
いや動作してるわけ無いだろwwwwwww
適当なこと言うなしね
190デフォルトの名無しさん:2011/06/29(水) 09:36:09.74
>>188
宣言が見えなきゃ使えるわけないだろ
複数のcppファイルから構造体使いたいならヘッダに宣言しとけ
191デフォルトの名無しさん:2011/06/29(水) 09:38:32.89
動作以前にコンパイルできねーだろ。コンパイラ通さなくても一目瞭然にわかる。
192178:2011/06/29(水) 09:41:50.14
すいません
大体こういう感じで動いてるという意味です
そのあたりは補完してください
193デフォルトの名無しさん:2011/06/29(水) 09:48:18.99
cppとヘッダの話に便乗して、超初歩的な質問を
cpp1つ。残り全部ヘッダファイル。じゃ駄目なん?
ヘッダファイルとcppの違いがワカラン!
194デフォルトの名無しさん:2011/06/29(水) 09:50:04.79
>>193
複数のcppにするのは分割コンパイルってのをしたいんだよ
それがどういうものかはググッてくれ
説明すると長いから
195uy ◆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;  ← これで先に名前だけ押しておく必要がある
196uy ◆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++
197uy ◆hi.ht/Isu2 :2011/06/29(水) 11:06:36.34

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

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

つまり、rrrr


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


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


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

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

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

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

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

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


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

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

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

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

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

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

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

こっちが「こういうプログラムなんでデータや形式はそれに合わせてください!」というなら楽なんだけどなwwww
225デフォルトの名無しさん: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]に改行(?)データが入るのか、隙間が出来てしまいます
どうすれば空データ(改行?)を回避できるのでしょう
226デフォルトの名無しさん:2011/06/30(木) 16:24:53.33
んな基本的なことを聞いてしまうなら本を1冊買いなさい
227デフォルトの名無しさん:2011/06/30(木) 16:26:51.15
i++のタイミングと条件判定
228デフォルトの名無しさん:2011/06/30(木) 17:22:31.65
0の場合であっても0xとかつけたほうがいいのですか?
229デフォルトの名無しさん:2011/06/30(木) 17:25:30.08
>>228
別にいらないけど付けたほうが分かりやすいっておもったら付けてもいいんじゃないかな
230デフォルトの名無しさん:2011/07/01(金) 03:16:06.50
0-9のcharをint変換したいのですが、どうすればいいのでしょう?

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

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

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

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

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

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

本気でC++なんだね^^;
一生やっててください
264デフォルトの名無しさん: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行目以降の先頭の文字列を読み取れるのでしょうか?
265デフォルトの名無しさん:2011/07/02(土) 06:19:02.59
>>263
「キリッ」って。
茶化してるってことは、痛いところつかれて反論できないってことか。
266 忍法帖【Lv=15,xxxPT】 :2011/07/02(土) 08:35:28.23
>>264
kazu[]は本来数値だろ。カンマで切らず行末まで読んでatoi()すればいい。
267デフォルトの名無しさん: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,}

というプログラム
268デフォルトの名無しさん:2011/07/02(土) 09:50:32.99
無理
自分でいちいち代入するしかない
269デフォルトの名無しさん: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];
270デフォルトの名無しさん:2011/07/02(土) 11:11:27.33
char a[4]={'a','a','a','a'};
char b[4]="aaaa";

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

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

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

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

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

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

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


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

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

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

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

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

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



って何度もいっているのにバカは効率を理解しない
299デフォルトの名無しさん:2011/07/03(日) 16:49:56.60
と、ゴミカスがほざいております
300デフォルトの名無しさん:2011/07/03(日) 17:28:59.99
もう俺がゴミカスでいいから、宗教論争を終わりにしてくれないか
301デフォルトの名無しさん:2011/07/03(日) 17:31:24.92
>>298この人ってどのスレでもあたかも全てが敵であるかのように振舞ってるよね
統合失調症とかいうやつかな?かわいそう
302デフォルトの名無しさん: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すら無く、多くのメモリは無駄 でも使いたい所では足りない という事になっています。
どうすれば無駄なメモリを確保しまくらずに、個数制限をしまくらなくて良いプログラムにできるでしょうか・・?
303デフォルトの名無しさん:2011/07/03(日) 19:04:41.87
mapとか、vectorで良いだろ。

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

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

効率が違いすぎる

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

345デフォルトの名無しさん: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);
346デフォルトの名無しさん:2011/07/06(水) 09:00:33.09
>>343
すごい。やっぱ知ってる人は知ってるんだな。
これって副作用については自己責任なのかな。読んでみます。
ありがとう。
347デフォルトの名無しさん:2011/07/06(水) 09:47:58.59
>>346
知ってるのはオレじゃなくてgoogle先生。
348デフォルトの名無しさん:2011/07/06(水) 09:50:56.93
googleはなんでも知っている。そう、あなたの尻の穴のシワの数まで
349天使 ◆uL5esZLBSE :2011/07/06(水) 10:20:22.27
これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような
そんな言語使ってる奴ってどうみてもゴミだと思うんだけど

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


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

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

不可解な事にほぼ同じ事を別の2組のヘッダーで行うと問題なく実体が作れるのに
なぜ未定義となってしまうのでしょうか?
うっすらでも思い当たる事が有ればご指摘頂けますと幸いです。
364デフォルトの名無しさん:2011/07/08(金) 12:44:40.67
当たり前だのクラッカー
365デフォルトの名無しさん:2011/07/08(金) 12:57:37.65
>>363
実はインクルードされてないのでは?
インクルードガードが邪魔してるとか。
366363:2011/07/08(金) 14:04:46.92
>>365
あー・・多重インクルード防止によって展開がされていないんですね・・。ありがとうございました。
367デフォルトの名無しさん: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で大きく変わるものですか?


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

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


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

わかりやすさ重視にしておきます
372デフォルトの名無しさん:2011/07/09(土) 11:25:07.37
>>371
プログラマとしてやっていくなら、死ぬまで有効な格言を教えよう。
KISS。これはどこまでいっても役に立つ。
373デフォルトの名無しさん:2011/07/09(土) 11:25:22.83
80:20規則は小学校で必修にするべきだと思う
そうすれば日本人もくだらない無意味な節電なんてやめられる
374デフォルトの名無しさん:2011/07/09(土) 11:27:35.33
>>373
誤爆?
次からは気をつけろよ
375デフォルトの名無しさん:2011/07/09(土) 11:40:08.72
>>374
すみませんでした
376デフォルトの名無しさん:2011/07/09(土) 11:45:29.67
>>375
反省したなら腹切って死ねカス
377デフォルトの名無しさん:2011/07/09(土) 11:48:10.26
>>376
それは嫌ですが
このあたりで止めにしましょう
この話題はこれで終了ということで
378デフォルトの名無しさん: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で初期化する意味を教えてください。
379デフォルトの名無しさん:2011/07/09(土) 11:50:16.79
        ____
    .   /     \
      /   _ノ '' ⌒\    
    /    (● ) (● ) \
    |    :::::⌒,  ゝ ⌒::::|       そんなカリカリすんなよ まったく
     \      `ー=-'  /
 ⊂⌒ヽ/           ヽ /⌒つ
   \ ヽ  /       ヽ    /
    \_,,ノ        |、_ノ
380デフォルトの名無しさん:2011/07/09(土) 11:51:33.39
>>377
あ?逃げてんじゃねーよ
切腹だ切腹。はやくしろ
みんないつもお前には迷惑してんだよ
381デフォルトの名無しさん:2011/07/09(土) 11:52:31.38
>>378
>char型配列をNULLで初期化する
この表現がよく分からないな、詳しくたのむ
382デフォルトの名無しさん:2011/07/09(土) 11:54:42.09
> printf("%s\n",&a);
おかしくねーか?
383デフォルトの名無しさん:2011/07/09(土) 11:56:55.43
printf("%s\n",a);
こっちやな
384デフォルトの名無しさん:2011/07/09(土) 12:40:20.07
>>367 >>371
わかりやすさ重視ってif二つを採用するんじゃないだろうな。

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

} else {

}


if (cond) {

}
if (!cond) {

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

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

どっちも使っても問題ない書き方だけど、実行結果として差が出たりするし意味合いが違うから、
ifとelseの代わりに使うものではないなぁ
393デフォルトの名無しさん:2011/07/09(土) 18:42:46.41
クラスによっちゃ!だって無視できるコストにならないかもしれない
だから書かなくて済むなら極力書かないほうが良い
394デフォルトの名無しさん:2011/07/09(土) 18:47:13.88
どうしても書きたいなら else if で書けばよいのですね
わかりました
ありがとうございます
395デフォルトの名無しさん:2011/07/09(土) 21:24:47.06
そして無視される385w
そこは本当に大丈夫か?
396デフォルトの名無しさん:2011/07/09(土) 22:16:46.90
些細なことで揚げ足を取るの二夢中になって本質の議論をおろそかにする。バカの典型例ですよね
397デフォルトの名無しさん: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++;
}

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

どうすればよいのでしょうか?
398デフォルトの名無しさん:2011/07/09(土) 23:41:58.12
>>397
< while(file.eof) {
< file.getline(str,sizeof(str), ',');
---
> while(file.getline(str,sizeof(str), ',') !=file.eof) {
399デフォルトの名無しさん: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]みたいな宣言をしたけど処理がガクっと落ちたり、消費メモリ量が跳ね上がったりする事はなかったもので
400デフォルトの名無しさん:2011/07/10(日) 11:18:01.72
>>399
実際どういう処理を記述したのかが分からないから確かなことは言えないんだが
仮想メモリという仕組みがあるので、大きな配列を確保しても確保しただけじゃタスクマネージャ等から確認するようなメモリ消費量は増えないことがある

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

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


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

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

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

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

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

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

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


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

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

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

・タイプIDから文字列とスプライトを作成する関数のポインタを取得する連想配列
・文字列からタイプIDを取得する連想配列
442デフォルトの名無しさん:2011/07/10(日) 22:04:38.84
>>441
悩んでいる所をつかめているか分からないからボヤっとした回答だが
・boost::serializationとかでシリアライズする
・cvsとかに変換テーブルデータ書いておく
・データが乱雑になってきたらsqliteとかで管理する
とかの方法もあると思うな
443442 :2011/07/10(日) 22:06:45.99
cvsとか何だよ俺バージョン管理システムかよ
csvだよ
444デフォルトの名無しさん:2011/07/10(日) 22:12:41.94
どんなデータを記録したいのかで千差万別。
シムシティと、RPGでは違うだろ。
445438:2011/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;
}
446デフォルトの名無しさん:2011/07/11(月) 13:03:06.60
とあるサイトで

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

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

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


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

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

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

hoge datalist[1000];

データ数が変更されないリスト表的なデータなら
構造体の配列要素をキーにしたほうが扱いやすくね?
455デフォルトの名無しさん:2011/07/11(月) 22:24:52.17
std::map<int,boost::tuple<int,char,std::string>>
などという手もあるぞ
456デフォルトの名無しさん:2011/07/11(月) 22:42:28.63
>>454
だいたいは二分木使って実装されてるでしょ
457デフォルトの名無しさん:2011/07/11(月) 23:23:41.99
赤黒木やな大体は
458デフォルトの名無しさん:2011/07/12(火) 02:37:29.13
A*探索って、ダイクストラのコストの小さいノードから確定して接続ノードを展開していってるのを、
現在の「コスト+ゴールまでの予想コスト」の小さいもの。に置き換えた版ってことであってる?
459デフォルトの名無しさん: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)で調べると値が異なるというのがわかりません。配列の大きさも同じなのに
460デフォルトの名無しさん:2011/07/12(火) 20:06:30.48
a[0]="00"
b[1]="00"

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

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

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


465デフォルトの名無しさん:2011/07/12(火) 20:56:32.06
std::stringを知ると幸せになれる人種
466デフォルトの名無しさん:2011/07/12(火) 20:58:05.81
if(a[0][0] == b[1][0])でご期待通りに動く
467デフォルトの名無しさん:2011/07/12(火) 21:00:13.95
てゆーか代入の時点で問題あるだろ
468デフォルトの名無しさん:2011/07/12(火) 21:03:33.51
>>466
え?
469デフォルトの名無しさん:2011/07/12(火) 21:23:03.09
a[0]="00\0";
b[1]="00\0";
こうだよね☆(ゝω・)v
470デフォルトの名無しさん:2011/07/12(火) 21:27:25.77
>>469
馬鹿なの?死ぬの?
471デフォルトの名無しさん:2011/07/12(火) 21:33:28.13
いやー。ネタなのかマジなのか本気で悩むわw
ネタだとしても意味わかんないし(汗
472デフォルトの名無しさん:2011/07/12(火) 21:36:38.09
>>469
の場合\0の後にももう1個\0つくの?
473デフォルトの名無しさん:2011/07/12(火) 21:39:40.31
つくよ
474デフォルトの名無しさん:2011/07/12(火) 21:40:38.58
>>473
さんくす
475デフォルトの名無しさん: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++ です。
476デフォルトの名無しさん:2011/07/12(火) 22:21:43.43
これは

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

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

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

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

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

どっちにすべきかの話をしてるなら内容次第なのでなんとも
483デフォルトの名無しさん:2011/07/13(水) 03:14:32.10
そんなのatomicにすればいいだけの話のような・・・
クリティカルセクションとかmutexとかセマフォとか
484デフォルトの名無しさん:2011/07/13(水) 03:20:09.43
それが対策ってことじゃん・・・・・・
用語だけでも添えておけということか
485デフォルトの名無しさん:2011/07/13(水) 03:21:45.25
いやそうじゃなくてマルチスレッドで対策なしという前提がおかしいって
486デフォルトの名無しさん:2011/07/13(水) 03:53:15.01
>>485
頭大丈夫?
487デフォルトの名無しさん:2011/07/13(水) 04:19:38.07
そちらこそ大丈夫ですか?
488デフォルトの名無しさん:2011/07/13(水) 04:21:29.77
大丈夫です
心配してくれてありがとう
489デフォルトの名無しさん:2011/07/13(水) 05:33:51.31
>>485
お前がアホ
490デフォルトの名無しさん:2011/07/13(水) 08:33:31.76
PGの9割はアホという統計が出てる
491デフォルトの名無しさん:2011/07/13(水) 08:35:42.93
職業プログラマはね
492デフォルトの名無しさん:2011/07/13(水) 08:50:47.86
アマは10割だしな
493デフォルトの名無しさん:2011/07/13(水) 08:58:09.89
アマというか趣味グラマはそうでもないぞ 好きでやってるからな
6割くらいだろう
494デフォルトの名無しさん:2011/07/13(水) 09:10:23.45
もっといい仕事選べばよかったのにね。アホ過ぎる
495デフォルトの名無しさん:2011/07/13(水) 11:31:24.46
日本の職業プログラマ60万人のうち6,7割は、ちょっとできるレベルの
アマプログラマに負けてるレベル。
496デフォルトの名無しさん:2011/07/13(水) 11:34:59.68
重要な産業なのに待遇最悪で教育もてんでダメとか日本終わってるよな
497デフォルトの名無しさん:2011/07/13(水) 14:35:27.87
C流のクラスの配列は非推奨ってあったんだけど何で?
498デフォルトの名無しさん: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前後(データの項目数は勝手に増減しない)
499デフォルトの名無しさん:2011/07/13(水) 20:37:27.68
>>498
例を見る限り、数字、英字、カナで判別出来そうだが。
500デフォルトの名無しさん:2011/07/13(水) 20:42:20.65
>>499
実際にはもう少し横に項目数があり、数字で別データもあるという感じでお願いします
501デフォルトの名無しさん:2011/07/13(水) 20:53:16.92
正規表現
502 忍法帖【Lv=24,xxxPT】 :2011/07/13(水) 21:54:15.40
>>498
その巫山戯た仕様をぶち壊せ。
503デフォルトの名無しさん:2011/07/13(水) 22:21:37.47
よめねえよバカ
読めるように間違えろ!
504デフォルトの名無しさん:2011/07/13(水) 22:28:45.50
>その巫山戯た
どういう文字列を変換したのか予想がつかないw

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

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

フザケル

御ふざけ


でないじゃん
508デフォルトの名無しさん:2011/07/14(木) 00:14:12.91
>>507
そんな戯けた辞書を使うのが悪い。
509デフォルトの名無しさん:2011/07/14(木) 00:23:49.37
え、中学生レベルの知識でしょ……
「流石」と同じレベル
510デフォルトの名無しさん: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すればいいんでしょ?
511デフォルトの名無しさん:2011/07/14(木) 00:35:43.16
std::pairって知ってる?
512デフォルトの名無しさん:2011/07/14(木) 00:47:58.43
>>511
mapの使い方が理解できました

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

for(i=0;i<4;i++)
{
5x10^i
}
517デフォルトの名無しさん:2011/07/14(木) 13:40:53.05
ループすればいいじゃん
518デフォルトの名無しさん: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);
}
519デフォルトの名無しさん:2011/07/14(木) 14:17:17.49
>>518
再帰を使って自作の指数関数ってわけですね

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


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

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

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

まあ最初はBeepで遊んでもいいけどね。
533デフォルトの名無しさん: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使うことにします。

534デフォルトの名無しさん:2011/07/14(木) 21:05:30.40
Cで出来てC で出来ないことってありますか?
535デフォルトの名無しさん:2011/07/14(木) 21:07:18.19
すみません、なんかプラスが消えました
「Cで出来てCぷらすぷらすで出来ないことってありますか」です
536デフォルトの名無しさん:2011/07/14(木) 21:19:54.00
テスト C++
537デフォルトの名無しさん: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++ではエラー
538デフォルトの名無しさん:2011/07/14(木) 21:27:32.05
>>537
Cだとその初期化ができるのか〜

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

struct {
int x;
char b;
} a = {
.b = 'c'
};
542デフォルトの名無しさん: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); // こっちでも呼べる


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

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

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

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

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

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

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

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

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

検索データ数が50未満の初心者のお勉強という低次元の話だけど
554デフォルトの名無しさん:2011/07/15(金) 20:28:06.43
>>551
bindとか使うんですね。。さらっと流してたけどいろいろ出来そう
ありがとうございました
555デフォルトの名無しさん: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; こんなのも全部未定義でしょうか?
556デフォルトの名無しさん:2011/07/16(土) 10:30:16.62
a[i++] = i % 2 ? 0 : 1;
これだけ未定義じゃない
557デフォルトの名無しさん:2011/07/16(土) 11:05:38.65
a[i++] = (j = i % 2) ? 0 : 1;
って書くと大丈夫じゃないような気も。いや気のせいか?
558デフォルトの名無しさん:2011/07/16(土) 11:17:55.21
要は左辺で++したりする変数が、右辺に出てきちゃったら未定義だったかと。
たとえカッコでどうしようとも。
559デフォルトの名無しさん:2011/07/16(土) 11:27:55.74
>>557,558
馬鹿は死ね
560デフォルトの名無しさん: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 参照
561デフォルトの名無しさん:2011/07/16(土) 11:52:57.83
×◯◯×じゃないのか?
562デフォルトの名無しさん:2011/07/16(土) 11:57:29.43
ああそうだね。?:演算子も副作用完了点だ。
563デフォルトの名無しさん:2011/07/16(土) 11:58:27.51
>>561
◯◯××じゃないのか?
564デフォルトの名無しさん:2011/07/16(土) 12:00:47.45
>>563
◯×◯×じゃないのか?
565デフォルトの名無しさん:2011/07/16(土) 12:05:08.58
××××じゃないのか?
×××◯じゃないのか?
××◯×じゃないのか?
××◯◯じゃないのか?
×◯××じゃないのか?
×◯×◯じゃないのか?
×◯◯×じゃないのか?
×◯◯◯じゃないのか?
◯×××じゃないのか?
◯××◯じゃないのか?
◯×◯×じゃないのか?
◯×◯◯じゃないのか?
◯◯××じゃないのか?
◯◯×◯じゃないのか?
◯◯◯×じゃないのか?
◯◯◯◯じゃないのか?
566デフォルトの名無しさん:2011/07/16(土) 12:17:10.31
おまえマジで暇だな
567563:2011/07/16(土) 12:31:58.56
> a[i++] = i; は未定義って規格にも注釈があるけど、
a[i] = i, i++;
568デフォルトの名無しさん:2011/07/16(土) 13:37:33.41
>>567
つまんねーよ。引っ込んでろ。
569デフォルトの名無しさん:2011/07/16(土) 13:40:09.33
>>567
a[i] = (i, i++);
こうするとやはり未定義か。括弧で評価順は変わらない?
570563:2011/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; の可能性もあると。
571デフォルトの名無しさん:2011/07/16(土) 14:54:09.17
>>570
頭大丈夫か?
572563:2011/07/16(土) 15:12:26.70
そうか、訂正して修正
>>568 は int j = i, a[j] = ++i; の可能性もあると。
573デフォルトの名無しさん:2011/07/16(土) 15:16:11.23
>>563
もう、いいから引っ込んでろ。痛々しすぎる。
574デフォルトの名無しさん:2011/07/17(日) 11:40:17.96
スコープに関して
そのブロックで使われなくなった時点で破棄されるのか
ブロックを抜けるときに破棄されるのか知りたいです
575デフォルトの名無しさん: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が含まれるスコープで消すしかない?

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

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

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

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

「c++はコピーの概念で出来てる」ってどこかで聞いた事があったので、
このあたりが関係してるのかなと思いました。
589デフォルトの名無しさん:2011/07/18(月) 10:23:18.56
参照を引き摺り回して破綻している言語より判り易いね。
590デフォルトの名無しさん: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");

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

しかし俺の予想だけどC++1Xは不発に終わるような感じがしている
C++ですら脱落者が多量に出てCに敢えて留まるプログラマが多かったのに
C++1Xはちょっとヤバさを感じている
592デフォルトの名無しさん:2011/07/19(火) 03:05:18.94
VC++2010ならすでにautoでいけるよ
何気にautoの使い方で一番有効だよな
いろんなコンテナを舐めるループをマクロで一括定義できる
593デフォルトの名無しさん:2011/07/19(火) 09:46:54.82
ひきずってるて
594デフォルトの名無しさん: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)
{
 処理
}
595デフォルトの名無しさん:2011/07/19(火) 11:46:26.56
BOOST_FOREACHは酷いコード吐くから使いたくないわ
596デフォルトの名無しさん:2011/07/19(火) 12:07:03.88
>>595
もうすでに酷いコード書いてるから
大丈夫だよ
597デフォルトの名無しさん:2011/07/19(火) 12:10:33.88
なるほど
598デフォルトの名無しさん:2011/07/19(火) 20:37:02.86
C++0xならrange base forになってBOOST_FOREACH捨てられるんだけど
599デフォルトの名無しさん:2011/07/20(水) 03:33:38.74
コンセプトさんがいないrange base forの実装なんて
600デフォルトの名無しさん:2011/07/20(水) 14:03:17.46
;をオーバーライドしったったwwwwwwww
うそですけどねwwwwwwwwwwwwwwwwwwwwwwwww
601デフォルトの名無しさん:2011/07/21(木) 00:26:09.10
C#とJavaしかやったことのない日曜プログラマで
これからC++をやってみようと思うんだが、Cやっといたほうが理解が進むのかな?
オブジェクト指向から学んだからいまいち手を出しにくいのだけれど…
602デフォルトの名無しさん:2011/07/21(木) 00:31:19.91
>>601
C#からな絶対うぜーってなるから
学ばない方がいい
603デフォルトの名無しさん:2011/07/21(木) 00:45:41.16
C++を勉強してC++に慣れてしまったが
C#から覚えたのなら、わざわざC++なんか覚えなくて良い
特に困ってなければC#でいいだろ

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

その時間でC#の理解度を高めたほうが100倍マシだな
604デフォルトの名無しさん:2011/07/21(木) 01:01:47.20
C/C++はJavaやC#とはコンセプトが違う。
そのコンセプトの違いに意味を見出せないならやる必要がない言語。
605デフォルトの名無しさん:2011/07/21(木) 01:23:08.02
不思議なことに、ある観点に立つと、
CとJavaは似ていて、
C++とC#もまた似ている。
606デフォルトの名無しさん:2011/07/21(木) 01:24:10.49
OS造りたいんならCやっといた方が良いな
607デフォルトの名無しさん:2011/07/21(木) 08:54:06.81
>>601
cでoopのやり方があるんだけどね、それを覚えたらc++の基礎はすぐに覚えられるよ。
あー、そんやって実現してんだ。
あー、そこをやってくれてるんだ。
あー、これが何でも作れるって奴か。
ってなるよきっとw
608デフォルトの名無しさん:2011/07/21(木) 09:24:04.90
>>607
それ大事
で次はstringやboostの実装みて
他言語のあれはこうやって動いてるのかとやる
609デフォルトの名無しさん:2011/07/21(木) 12:20:30.50
まずはCASL IIを学べ
Z80や8086でもいい
やっておくと理解度が全然違うぞ
610デフォルトの名無しさん:2011/07/21(木) 12:55:02.88
すみません。
CreateWindow関数で作ったウィンドウに、ファイルをドラッグ&ドロップしてそのフルパスを取得したいのですが、
どう実現すれば良いのでしょうか? ググるべきワードか関数名を教えて下さると幸いです;
611デフォルトの名無しさん:2011/07/21(木) 12:57:13.70
WM_DROPFILES
612デフォルトの名無しさん:2011/07/21(木) 12:58:42.79
>>610
「winapi ドラッグアンドドロップ」でググると一番上に出てくるよ。
613610:2011/07/21(木) 13:11:23.78
>>611 >>612
早速具体的な情報を見る事ができました。ありがとうございますっ
614デフォルトの名無しさん: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[]の要素ナンバーに直す方法か、もっと正しいやり方があれば教えて頂けますと助かります;
615デフォルトの名無しさん:2011/07/22(金) 07:38:10.82
>>614
sizeof(tgt)は使えないぞ
ちゃんと計算して残りのメモリのサイズを渡さないと
616デフォルトの名無しさん:2011/07/22(金) 07:43:54.96
if(tgt) sprintf_s(tgt, text - tgt + sizeof(text), ".txt");
617デフォルトの名無しさん:2011/07/22(金) 07:45:41.54
わかりにくい罠教えるなよ
618デフォルトの名無しさん:2011/07/22(金) 07:49:55.43
こんな感じでしょ
sprintf_s(tgt, sizeof(text)-(tgt-text), ".txt");
619614:2011/07/22(金) 08:35:49.24
>>615-618
沢山のご助言ありがとうございます。 sizeof(tgt)が間違いだったんですね。
そして、tgtを計算に使うと元の配列のサイズ+検索結果位置の値になるんですね。初めて知りまりた。
勉強なります。 無事解決し最低限は理解をする事ができました。 ありがとうございました〜
620 忍法帖【Lv=30,xxxPT】 :2011/07/22(金) 09:48:36.87
>>619
ポインタ周りの計算が解ってない悪寒。
それと、なんの為にsprintf_s()に使える領域サイズを教示しているのかも解っていない悪寒。
621デフォルトの名無しさん:2011/07/22(金) 09:50:13.13
仕事だとしたら大迷惑だな。
622デフォルトの名無しさん: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]));
  }
}
623デフォルトの名無しさん:2011/07/23(土) 15:27:01.25
上のコード、continue後の閉じブロックが下にずれてしまってます・・。
624デフォルトの名無しさん:2011/07/23(土) 16:02:04.99
while(1)
じゃなくて
for(;;)
を使えって言われたけど何で?
625デフォルトの名無しさん:2011/07/23(土) 16:06:32.00
>>624
そんなのは個人の好みだから、言った本人に聞くしか無いよ
1がマジックナンバーみたいで気に入らなかったんじゃないの
626デフォルトの名無しさん:2011/07/23(土) 16:14:58.16
>>622
stringのコンストラクタ見たらなんとでもなるんじゃないのか
627デフォルトの名無しさん:2011/07/23(土) 16:16:06.12
>>624
while(1)だと毎回真偽値判定されてループするが
for(;;)だと空白→特殊処理としてループすることになるんでコストがお得とか何とか
そしてこれはいにしえの話らしい
628デフォルトの名無しさん:2011/07/23(土) 16:19:44.55
>>627
いしにえだと断って言われたんなら
そういう話で解決してるんじゃん

何十年前の話だよって感じだが
629デフォルトの名無しさん:2011/07/23(土) 16:23:55.18
>>622
>「KEY=VALUE」みたいな行が複数あるテキストファイル
それiniファイルの書式だから
所謂MBCSの扱いでいいならboostかwindowsならapi使えば?
win32apiなら予めUnicodeにしておけばそのままwstringに入れられるし
630デフォルトの名無しさん: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はその項目に飛ぶ)
631デフォルトの名無しさん:2011/07/23(土) 20:13:43.59
if
else if
にしろ
632デフォルトの名無しさん:2011/07/23(土) 20:14:30.89
はい
633デフォルトの名無しさん:2011/07/23(土) 20:14:51.17
まず、そのスイッチに対応するのは、
if(ESC)
else if(F1)
else if(F2)
だろうに…。で、そんな書き方は冗長だから、
そんなときこそスイッチを使うんじゃないの。
634デフォルトの名無しさん:2011/07/23(土) 20:15:37.03
アセンブリコード吐かせてみればわかるけど、両方とも似たようなコードに
コンパイルされる。switchはジャンプテーブル使ったジャンプにはならない。
635デフォルトの名無しさん:2011/07/23(土) 20:17:08.54
break;抜けるなら変わらないけど
そうじゃなかったりしたらぜんぜん違ってくるよ
あと{}つけないとスコープも違っている
636デフォルトの名無しさん:2011/07/23(土) 20:41:11.93
>>626
詳しく教えてもらえますか?

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

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

                                       おわり

って意味じゃね?
642デフォルトの名無しさん:2011/07/23(土) 21:28:57.49
>>640
質問者はswitchはジャンプテーブル使った間接ジャンプにコンパイルされると
思ってたから、>>630のような質問をした。
実際はそんなコードにはならないという事がわかれば、どっちで書いても実際
は大差がないので読みやすい方で書けばいいという結論が得られる。
643デフォルトの名無しさん: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, なんか整数変数, , なんか整数変数)));
ってすりゃいーじゃん
644639:2011/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と一緒
645デフォルトの名無しさん:2011/07/23(土) 21:40:42.15
変数をカウントアップしながらループするのは、whileでもforでも書けるけど
for()のほうがその意図が明確になる。
一個の変数を参照して分岐する処理ならswitchがいいな。
646デフォルトの名無しさん:2011/07/23(土) 21:46:22.94
boost::stringtok()
647デフォルトの名無しさん:2011/07/23(土) 21:51:59.05
どのみちstlコンテナなんだからコピーしまくりだろうに


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

>> 646
サンクス

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

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

ってんなら文章として通じるんだけどね。
653デフォルトの名無しさん:2011/07/24(日) 15:59:50.47
hanakusogaumai.
654デフォルトの名無しさん:2011/07/24(日) 16:05:24.66
>>652
へ?
655デフォルトの名無しさん: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++標準関数が使える環境で
これをもっとエレガントなやり方を教えてくださいませんでしょうか?
まことに勝手ですがふしてお願い申し上げます。
656デフォルトの名無しさん:2011/07/24(日) 17:51:58.98
char *p = strdup("hello");
free(p);
657デフォルトの名無しさん:2011/07/24(日) 17:55:59.00
std::string s = (boost::format("%s") % "hello").str();
658デフォルトの名無しさん:2011/07/24(日) 18:00:06.29
> STLもしくはC++標準関数が使える環境で
この環境では
> Cの書式出力が便利
こう考える人を納得させるものがないので、boost::formatというのが作られた。
直球でいうとその環境でエレガントな方法は無い。
659デフォルトの名無しさん:2011/07/24(日) 19:47:23.96
やっぱそうなんですね。
ありがとうございます。
これで堂々とこの汚いやり方で行けます
660デフォルトの名無しさん:2011/07/24(日) 22:05:48.90
C++でクロスプラットフォームなMIDIライブラリをRtMidi以外で知りませんか?
66187:2011/07/25(月) 00:04:51.15
1バイト文字の配列から、全ての文字の出現回数をカウントしたいのですが(文字のヒストグラム)
どのコンテナを使ったら幸せになれますか?
662デフォルトの名無しさん:2011/07/25(月) 00:28:48.07
int count[256] = {0};
while (*p != '\0') ++count[*p++];
663デフォルトの名無しさん:2011/07/25(月) 00:33:14.40
multiset
664デフォルトの名無しさん:2011/07/25(月) 09:54:50.35
>>660
sdlとか?
665デフォルトの名無しさん:2011/07/25(月) 13:20:35.95
>>654
あるいは、最後が
にわかクン「別にだめじゃないのか」
でもおk
666デフォルトの名無しさん: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);
};
667デフォルトの名無しさん:2011/07/25(月) 22:09:50.61
cppファイルをインクルードするなよ
668デフォルトの名無しさん:2011/07/25(月) 22:17:45.24
すみません、では test.cpp で実装したメンバを利用する際には
どうすればいいのでしょうか?
669デフォルトの名無しさん:2011/07/25(月) 22:18:57.86
>>668
なんのためにヘッダにクラスを公開してんだよ
ヘッダをインクルードして好きなだけ使えばいい
670デフォルトの名無しさん: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" は何のためにあるのでしょう?
671デフォルトの名無しさん:2011/07/25(月) 22:32:19.98
>>670
main.cppとtest.cppは別々にコンパイルされます
#include "test.h"しないと
testがなにを意味しているかコンパイラさんが分からないだろ
672660:2011/07/25(月) 22:40:37.69
>>664
レスありがとうございます。
MIDIってのはMIDIファイルのことじゃなくて
MIDI I/Oってことでした。バーチャルポート作ってそっからMIDI信号出力とかがやりたかったんです。
明記してなくてすみません。
まさにRtMidiの様な機能があればいいのですが、
RtMidiはMac OS Xでユニバーサルビルドができなくて...
673デフォルトの名無しさん:2011/07/25(月) 22:52:09.98
>>671
ありがとうございます。test.cppがいつどう呼ばれるのかだけがまだわかってません……
でも、おかげさまで何となくわかってきた気がします。
Cは(当方PHPをかじったことしかないのですが)includeを追うのではないんですね。
確かに、test.cpp単体でコンパイルする時のことを考えると、test::test って何だよって話ですよね。
674デフォルトの名無しさん:2011/07/25(月) 23:03:35.67
main.cpp をコンパイルする → main.obj ができる
test.cpp をコンパイルする → test.obj ができる
main.obj と test.obj とそのほかもろもろ (printfとかscanfとかいろいろたくさん) をリンクする → .exe ができる
675デフォルトの名無しさん:2011/07/25(月) 23:53:26.50
includeって呼ぶ、というよりは1ファイルごとに正しい動作をできるようコンパイラに示すためだけのものって感じですね。
(↑我ながら意味不明な文ですが、何となく理解したつもりです)
レス遅れてしまいすみません。恐らく理解できました。
本当にありがとうございます。感謝しています。
676デフォルトの名無しさん:2011/07/26(火) 00:05:03.81
include ってのは単に指定したファイルの内容をコンパイル前にその場所にぶちまけるだけ
#include "test.h"と書く代わりにtest.hの中身をそこに書いてるのと同じこと
677デフォルトの名無しさん:2011/07/26(火) 00:17:07.74
どうもコンパイルの最中に追っていくようなイメージがあったのです。
自分の中の勘違いも解け、スッキリできたと思います。本当にありがとうございます。
678デフォルトの名無しさん:2011/07/26(火) 02:03:20.45
ある関数で構造体配列を宣言して、アドレス渡しで他の関数に渡した場合、アドレスを受けとった側の関数で初期化は可能でしょうか?
679デフォルトの名無しさん:2011/07/26(火) 02:04:32.05
可能
680デフォルトの名無しさん:2011/07/26(火) 06:11:45.30
ありがとうございます。
どのように記述すれば良いでしょうか?

下記の様な書き方でしょうか?
memset(test,0,sizeof(*test));
681デフォルトの名無しさん:2011/07/26(火) 08:22:32.00
ok
682デフォルトの名無しさん:2011/07/26(火) 08:24:48.11
>>680
Cならまぁ、それでもいいけどC++だったらダメ。
683デフォルトの名無しさん:2011/07/26(火) 10:34:12.85
上記記述方法では構造体配列の[0]しか初期化されませんでした。やはり、配列数も渡さない限り、関数側ではわからないですよね。
684 忍法帖【Lv=32,xxxPT】 :2011/07/26(火) 11:55:48.14
>>683
配列数なんて渡しても意味ないだろ。要素数を渡しておけ。
685デフォルトの名無しさん:2011/07/26(火) 14:33:39.87
vectorでサイズを指定して二次元配列を作るとき、例えば2×3の配列なら
vector<vector<int> > a(2, vector<int>(3));
とできますが、3次元配列の場合の書き方を教えてください
686デフォルトの名無しさん:2011/07/26(火) 15:06:22.28
>>685
応用利かない奴だな。
ほれ。
http://ideone.com/qixkT
687デフォルトの名無しさん:2011/07/26(火) 15:17:20.17
>>686
ありがとうございます
688デフォルトの名無しさん: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は同じ物として扱われてしまう?
689デフォルトの名無しさん:2011/07/27(水) 07:48:00.45
スコープ
690デフォルトの名無しさん:2011/07/27(水) 09:50:51.70
で?
691デフォルトの名無しさん:2011/07/27(水) 09:59:00.94
.cに書いたグローバル変数は、staticをつけるとファイルごとのスコープに
なるけど、なんかそこらへんの話と混同してそう。
>>688はローカル変数だし、.hだし。
692デフォルトの名無しさん:2011/07/27(水) 10:06:27.97
なんでヘッダーに書いてんだ
693デフォルトの名無しさん:2011/07/27(水) 11:18:21.04
stlに言え
694デフォルトの名無しさん:2011/07/27(水) 11:27:57.60
まあinline関数とかテンプレートはヘッダに書かないといけないけど。
695デフォルトの名無しさん:2011/07/27(水) 11:44:03.37
いやいやw
質問者の内容だと

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

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

とかになったら意味が無くなるだろw
696デフォルトの名無しさん:2011/07/27(水) 11:44:33.06
おっと、、<> は ""で
697デフォルトの名無しさん:2011/07/28(木) 14:51:12.22
メンバ関数内で宣言した静的ローカル変数って、
クラスのインスタンスをデストラクタで解体した時に消えてくれます?
698デフォルトの名無しさん:2011/07/28(木) 14:53:34.61
くれません
699デフォルトの名無しさん:2011/07/28(木) 14:55:14.91
ていうか作れたか?
メンバ関数もstaticなのか?
700デフォルトの名無しさん:2011/07/28(木) 15:05:29.60
すんません、シングルトンクラスです
回答ありがとうございます
701デフォルトの名無しさん: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;
}
702デフォルトの名無しさん:2011/07/30(土) 01:31:39.35
>>701
setVec(char& ch) : ch_(ch) {}
これ消せよ
703デフォルトの名無しさん:2011/07/30(土) 01:36:06.66
vec.insert(vec.cend(), data.cbegin(), data.cend());
素直にこう書け
704デフォルトの名無しさん:2011/07/30(土) 01:42:47.29
vec.assign(data.cbegin(), data.cend());でいいだろ
705デフォルトの名無しさん:2011/07/30(土) 16:27:23.15
>>701です
thx ALL
706デフォルトの名無しさん:2011/07/31(日) 22:58:02.88
オブジェクト、インスタンスをファイルに保存できるクラスがあると
どっかで読んだ気がするんですが、クラス名が思い出せません。
環境はVC++です。
707デフォルトの名無しさん:2011/07/31(日) 23:03:27.28
シリアライズとかマーシャルって技術だな
ex.Boost.Serialize

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

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

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

しかし、検索しても転送自体全くしたことが無いので、どんな言葉で調べればいいのかもわかりません。
何かこういう言葉で調べろとか、このサイトを見ろとかありましたら教えてもらえないでしょうか。
715デフォルトの名無しさん:2011/08/02(火) 04:20:48.69
>>713
ありがとうございます。
Qtは4をインストールして英文ドキュメント見てますが、
いまだにサンプル以上を使えてないorz
716デフォルトの名無しさん:2011/08/02(火) 11:39:05.02
可変引数を処理する際にvsaprintfを使用したソースを組んだのですが、
GNUのソース開示の規約があるためプロパーがソースを組み直せと言います。
他に可変引数を処理できるような便利な関数はないでしょうか。
717デフォルトの名無しさん:2011/08/02(火) 11:41:55.29
__VA_ARGS__は
718デフォルトの名無しさん:2011/08/02(火) 12:11:18.45
templateとオーバーロードで頑張る
719デフォルトの名無しさん:2011/08/02(火) 15:20:37.82
>>714
wininet
720デフォルトの名無しさん: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: '->(関数名)' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
となってしまいます。
コレを解決するにはどうしたらよいでしょうか?
721デフォルトの名無しさん:2011/08/02(火) 18:21:44.08
尻の穴?
722デフォルトの名無しさん:2011/08/02(火) 18:28:37.46
>>720
ポインタのリストを持つだけなら前方宣言だけでいける
おまえのコードがクソすぎて怒られる原因はわからん
723デフォルトの名無しさん:2011/08/02(火) 18:36:35.17
可能な限り、問題が出てるソースをコピペするようにしようぜ
それだけだと問題が多すぎて絞り込めないw
724デフォルトの名無しさん:2011/08/02(火) 18:48:02.32
>>720
とりあえずセミコロンがずいぶん足りないようだが大丈夫か?
725720:2011/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);
}
};
726デフォルトの名無しさん:2011/08/02(火) 19:09:53.25
メンバ関数は宣言と定義を分けて定義は下の方にもっていけ
727デフォルトの名無しさん:2011/08/02(火) 19:22:15.23
>>726
ありがとう!
728デフォルトの名無しさん:2011/08/04(木) 19:51:57.16
すみません。Debugモードでビルドすると正常の動くのに
Releaseモードでビルドすると、破壊されていない様に見える変数へのアクセス違反で
異常終了してしまいます。

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

このあたりかなぁ
730728:2011/08/04(木) 20:21:01.68
>>729
ありがとうございます。
assertも試しに数箇所使ってましたが、未初期化変数が山の様にあります;
まずはそっちからですね・・それでも解決しなかったらメモリ不正アクセスを絞り込みながら調べてみます、
ご助言ありがとうございました、感謝っ
731デフォルトの名無しさん:2011/08/06(土) 17:25:41.13
std::map のデータをfor_eachの第三引数で、operator()()をオーバーライドした関数オブジェクトに渡したいのですが
文法的に正しいのでしょうか?
ネットで探してもあまり例が出てないので、間違ってる気がするのですが?
732デフォルトの名無しさん:2011/08/06(土) 17:26:26.20
正しいですよ
733デフォルトの名無しさん:2011/08/06(土) 17:43:18.60
>>732
thx です
std::map はfor_each できない仕様ということですね。
boost やloki でも同じなんでしょうか?
734デフォルトの名無しさん:2011/08/06(土) 17:54:31.55
正しいつってんだろが
735デフォルトの名無しさん:2011/08/06(土) 19:25:45.10
厳密には正しくない
736デフォルトの名無しさん: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 ではどのように書いたらいいですか。
737デフォルトの名無しさん: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;}
};
738デフォルトの名無しさん:2011/08/06(土) 22:30:28.20
>>737 thx
739デフォルトの名無しさん:2011/08/10(水) 02:47:53.63
int=32bitていつまで続くんだ
もう10年以上たってるだろ
740デフォルトの名無しさん:2011/08/10(水) 02:57:43.49
もう変えないと思うよ
741デフォルトの名無しさん: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;
}

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

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

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

文字数が4の倍数でない場合の処理に特に苦心しましたが、(最後に"="とか"=="のついているbase64)
文字数が4の倍数で無い場合だけ、最後に特別な処理を行わせるようにして自己解決しました
759デフォルトの名無しさん: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
760デフォルトの名無しさん:2011/08/17(水) 22:51:15.23
>>759
もっと基礎からやり直せ
761デフォルトの名無しさん: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億未満と書けば良い話なのでしょうけれど、
同じビット判定で統一したりってできないものでしょうか・・?
762デフォルトの名無しさん:2011/08/18(木) 21:48:27.33
>>761
ビットの勉強するといいよ
if(2000000000 & 2000) printf("It can't be. ;-)");
763デフォルトの名無しさん:2011/08/18(木) 21:49:13.11
>>761
出来ない。出来ない理由を理解したいなら、中学校の数学からやり直せ。
764デフォルトの名無しさん:2011/08/18(木) 22:00:35.68
>>762
ありがとうございます; 1110111001101011001010000000000と、11111010000でtrueが返るんですね・・。
2の倍数の整数以外のビット判定は厳禁なのでしょうか。 何にしても勉強しなおしてきます。

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

ご助言ありがとうございます。早めに知れて良かったです。
765デフォルトの名無しさん:2011/08/19(金) 02:31:30.83
1110111001101011001010000000000
0000000000000000000011111010000
------------------------------- [AND]
0000000000000000000010000000000 ->true
766デフォルトの名無しさん:2011/08/19(金) 05:05:45.99
if (temp >= 2000000000) { ... }
else if (temp >= 1000000000) { ... }
else if (temp >= 0 ) { ... }
わかりやすい
767デフォルトの名無しさん: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 ) { ... }
768デフォルトの名無しさん: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に仮定するんだったら、さらに現実的な仮定を使ってより簡単な方法はないものか。
769デフォルトの名無しさん:2011/08/22(月) 01:02:31.22
>>768
言いたいことが俺に伝わっているか微妙に自信がないけどこういうこと?
ttp://codepad.org/VfoFbiql
770デフォルトの名無しさん:2011/08/22(月) 01:25:08.55
俺もそれの事だと思った
771デフォルトの名無しさん:2011/08/22(月) 01:27:46.91
a = (float)b
c = nextafterf(b, FLT_MAX)
でいいのか自信ない
772デフォルトの名無しさん:2011/08/22(月) 01:40:47.53
結局-0.0fと0.0fって違うんですか?
773デフォルトの名無しさん: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) }
にしないとまずいのか
774デフォルトの名無しさん:2011/08/22(月) 18:38:29.12
C++の新しい規格が決まったみたいですが、いま出てる入門書より、これから出る新規格にそった入門書を買った方がいいんでしょうか?
これまで蓄積されてきたノウハウや、公開されているソースは旧規格のものだから、そういうのを使う場合、新規格入門書より、旧規格の入門書を読んだほうがいいんですか?
775デフォルトの名無しさん:2011/08/22(月) 21:30:53.47
入門レベルで違いはないだろ。
776768:2011/08/23(火) 01:03:52.84
nextafterfって、そのまんまな関数があったのですね。ついでにnexttowardfってのもあるのか。
777デフォルトの名無しさん:2011/08/23(火) 21:35:18.21
>>775
それじゃあ今出てる入門書買います。どうもありがとうございました。
778デフォルトの名無しさん:2011/08/24(水) 01:37:00.96
関数にstaticつける意味って何?
779デフォルトの名無しさん:2011/08/24(水) 01:45:12.79
ファイル外からその関数は呼ばれないよ、ということを主張させるため
780デフォルトの名無しさん:2011/08/24(水) 01:51:32.64
Cでは定義されたファイル外に公開しない関数ってこと
C++でのprivate関数みたいなもの
C++ではインスタンスを生成しなくても呼び出せる関数って事
781デフォルトの名無しさん:2011/08/24(水) 03:34:11.78
staticがついた関数は内部結合になる
逆に何も付いていないと外部結合になる
メンバ関数のstaticだと>>780のインスタンスを生成しなくても呼び出せる関数
782365 :2011/08/24(水) 12:27:55.41
STL勉強中ですが、for_eachでファンクタを外だしにするくらいなら
普通にfor文でいいと思うのですが、for_eachのほうがC++流なのでしょうか?
783デフォルトの名無しさん:2011/08/24(水) 16:11:10.99
>>782
BOOST_FOREACHはもう少し楽だぞ
784デフォルトの名無しさん:2011/08/24(水) 18:03:01.19
>>782
イテレーターを定義して使わなくて良いなどのこともあるけど、
for_each などが真に活きてくるのは、C++0x になってからよ。
785デフォルトの名無しさん:2011/08/24(水) 21:45:05.81
結局時間取得はどれ使えばいいんだよ
786デフォルトの名無しさん: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]; //知恵
↑のコードを変数名を変えずにスマートにまとめるにはどうしたらいいでしょうか。
787デフォルトの名無しさん:2011/08/25(木) 01:48:38.69
int n = boguDataObj.fukaV1[boguNo];
switch(boguDataObj.fukaS1[boguNo]) {
case 1: soubi_Kattack += n; break;
以下繰り返し
788デフォルトの名無しさん:2011/08/25(木) 01:50:55.94
変数名変えたくないなら新しく配列用意してそれに入れて
789786:2011/08/25(木) 01:52:11.53
>>787
ありがとうございます。
swich自分から使ったことなかったけど
swichデビューすることにします。
790786:2011/08/25(木) 01:56:28.46
>>788
ありがとうございます。
それは考えたのですが、コード量はあまり変わらない気がしました。
791デフォルトの名無しさん: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];
792デフォルトの名無しさん:2011/08/25(木) 02:19:17.37
newしたものをdeleteしなくてもプログラムが終了したらメモリ解放されるの?
実行と終了ずっと繰り返したがぜんぜん消費メモリ増えない
793786:2011/08/25(木) 02:22:08.66
>>791
ありがとうございます。
こんなすごい方法思いつきませんでした。
今後の拡張性を考えてswichの方を使うことにします。
794デフォルトの名無しさん:2011/08/25(木) 02:26:08.84
>>792
今時のOSなら解放してくれる
795デフォルトの名無しさん:2011/08/25(木) 02:29:29.32
>>793
拡張する予定なら 関数化+switch使用 を薦める
796デフォルトの名無しさん:2011/08/25(木) 02:33:24.52
クラス設計からやり直せ
797デフォルトの名無しさん: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];
798デフォルトの名無しさん:2011/08/25(木) 02:59:34.91
GUIプログラミングってずっとループばっかじゃん
処理重くならないの?
799デフォルトの名無しさん:2011/08/25(木) 03:06:28.88
>>798
書き方による
GetMessage で待つようにしてれば問題ないレベル
800786:2011/08/25(木) 12:02:52.81
>>797
ありがとうございます。
それで行きます。
801デフォルトの名無しさん:2011/08/25(木) 12:54:07.75
main関数の戻り値って何の意味があるんですか?
802デフォルトの名無しさん:2011/08/25(木) 13:26:13.12
意味があるように作れば意味がある
803デフォルトの名無しさん:2011/08/25(木) 14:15:16.16
>>801
DOSの時代だと、バッチファイルで受け取って分岐とかできてた。
unixとかでもシェルで同じような使い方できるんじゃないの。
804デフォルトの名無しさん:2011/08/25(木) 14:48:53.64
いまのWindowsでもsetup.exeがインストールに成功した/失敗したの判定に使ってる・・・かもしれん
805デフォルトの名無しさん:2011/08/26(金) 08:02:27.36
>>802-804
コマンドは全て戻り値返してるだろ。
適当に答えるなよ。
806 忍法帖【Lv=39,xxxPT】 :2011/08/26(金) 08:28:33.48
戻したコードに意味があるかは別の話だね。
807デフォルトの名無しさん:2011/08/26(金) 08:55:34.97
で?
808デフォルトの名無しさん:2011/08/26(金) 09:08:35.90
>>805
お大事に。
809デフォルトの名無しさん:2011/08/26(金) 22:54:52.58
switchとcaseにはcaseのところでインデントしないのが一般的なのですか?
810デフォルトの名無しさん:2011/08/26(金) 22:57:58.28
一般とかないので好きにしてください
811デフォルトの名無しさん:2011/08/27(土) 09:09:01.53
アセンブリだとオーバーヘッドないってうそだよね?
812デフォルトの名無しさん:2011/08/27(土) 09:32:42.64
オーバーヘッドの定義による
813デフォルトの名無しさん:2011/08/27(土) 17:48:59.52
long double つかうと値がおかしくなる
814デフォルトの名無しさん:2011/08/27(土) 21:02:23.00
VC++でコンソールプログラミングしているんだけど
閉じるボタン押されたときの処理ってどうなされているの?
815デフォルトの名無しさん:2011/08/28(日) 01:36:18.59
コンソールが閉じる
816デフォルトの名無しさん:2011/08/28(日) 12:23:19.48
アドレスを取れないビットフィールドの変数がconst参照で渡せるのが納得いかなくて、取得側でアドレスを調べてみたら、
共用体と全然違うところに、1ビットで連続する変数の間隔が12バイト開いてた。
const参照って通常の参照に制限をかけるものじゃなくて、中身をどこかにコピーしてるもんなの?
それなら値渡しとコストが変わらない冗長な記述なんじゃないのって思ったんだけど、何か違う?
817デフォルトの名無しさん:2011/08/28(日) 12:27:00.04
コンパイラの名前とバージョンは?
アドレスを見ようとするから、わざわざ用意してる可能性あり。
818デフォルトの名無しさん:2011/08/28(日) 12:42:05.09
そもそもどう渡したんだ?
struct X {
int y:1;
int const & get() {return y;}
}
とかだとgetの返却値はyをintにキャストした一時変数の参照だぞ。
819デフォルトの名無しさん: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
820デフォルトの名無しさん:2011/08/28(日) 16:30:11.82
>>819
そのソースだと>>818がいってるのと同じこと。

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

switch(a)
{

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

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

世界が変わった気がした
834デフォルトの名無しさん:2011/08/30(火) 23:59:09.09
めくるめく高階関数の世界へようこそ
835826:2011/08/31(水) 00:16:27.99
>>830>>832
今までswitch文がしっくりしてなかったけど
ラベルだって知って初めてしっくりきました。
836デフォルトの名無しさん:2011/09/01(木) 03:03:18.04
最近CからC++に移行したのですが、ある本を見るとmain関数の中にreturn 0;がありませんでした。
これは、「C++ではmain関数で戻り値を明示しなかった場合は0になる」という理解で合ってますか?
837デフォルトの名無しさん:2011/09/01(木) 05:21:07.95
あってます
838デフォルトの名無しさん:2011/09/01(木) 11:24:18.01
>>836
warning C4508: がコンパイルすると出るだろ?
839デフォルトの名無しさん:2011/09/01(木) 11:31:08.13
>>838
出ないよ
840デフォルトの名無しさん:2011/09/01(木) 11:33:34.61
>>838
int main(){}
をVC++2010でビルドしたところ、特に警告は出ませんでした。
環境によっては警告が出ることもあるのでしょうか?
そうだとすれば、やはり戻り値を明示した方が良いのでしょうか?
841デフォルトの名無しさん:2011/09/01(木) 11:43:59.30
838
VC6でした。
>>840
しなくていいよ.ボロコンパイラがwarnning出そうが知ったこっちゃない
842デフォルトの名無しさん: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;
843デフォルトの名無しさん:2011/09/01(木) 16:55:27.44
>>840
0以外の値を返したいなら書くしかない。
ただそれだけ。
844デフォルトの名無しさん:2011/09/02(金) 06:47:53.71
atan2の引数はなぜあのような順番になっているの?
845デフォルトの名無しさん:2011/09/02(金) 10:28:46.13
>>844
何かご不満でも?
846デフォルトの名無しさん:2011/09/02(金) 11:42:16.06
>>845
xy平面上に原点Oおよびそれと異なる点P(x,y)があるとき、x軸と半直線OPのなす角を求めたりするときに
atan2の引数の順番が逆になっていれば、点Pの座標をそのまま使ってatan2(x,y)と出来ると思うんですが
847デフォルトの名無しさん:2011/09/02(金) 12:06:36.79
atan3でも作ればいいじゃない
848デフォルトの名無しさん:2011/09/02(金) 12:14:25.93
>>847
そうじゃなくて、そもそものatan2が何故ああなのかが気になる
俺よりはるかに頭の良い人が作った言語なのに、理由もなく逆にしてるってのは多分ないと思うので
849デフォルトの名無しさん:2011/09/02(金) 12:22:43.93
普通の(下に延びるスタック)CPUなら、逆になってないだろ。
850デフォルトの名無しさん:2011/09/02(金) 12:30:26.65
tanがy/xだからyが先
851デフォルトの名無しさん:2011/09/02(金) 12:46:27.88
x>0 なら atan(y/x)==atan2(y,x) だから
852デフォルトの名無しさん:2011/09/02(金) 13:03:17.68
>>850-851
それぐらいの理由ならわざわざatan2を用意する必要も無いような……
と思ったら、atanとatan2では値域が違うんですね
(atanは数学的な逆正接関数と同じく-π/2〜π/2、atan2はx, yの符号に応じて-π〜πの値をとる)
これには何か意味があるんでしょうか?
>>846のような使い方では引数の順番が合わないので違うと思いますが……
853デフォルトの名無しさん:2011/09/02(金) 13:09:35.83
だから、y / xの順番なんだよ。xが0のときには重宝するぞ。
854デフォルトの名無しさん:2011/09/02(金) 13:13:39.91
>>852
バカは考えるな
855デフォルトの名無しさん:2011/09/02(金) 13:14:03.43
>>852
学校の勉強くらいしろよ
856デフォルトの名無しさん:2011/09/02(金) 13:18:41.04
>>853
そのような理由であれば、引数の順番については納得出来ます。
それでは、値域が-π〜πであるということにも何か理由があるのでしょうか?


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

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

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

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

                                ↓

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

                                ↓

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

                                ↓

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

                                ↓

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

                                ↓

                              神の誕生
888デフォルトの名無しさん:2011/09/04(日) 20:56:36.43
馬鹿の誕生の間違いだろ
糞本ばかりあげやがって
889デフォルトの名無しさん:2011/09/04(日) 20:57:11.74
ネタコピペにマジレスするなよ
890デフォルトの名無しさん:2011/09/04(日) 21:00:13.61
マジレスすると、大きめの本屋で立ち読みして肌に合ったものを選ぶのが一番
他人が分かりやすいからといって、自分が分かりやすいとは限らない
本の語り口調が肌に合わないとか色々あるしな
891デフォルトの名無しさん:2011/09/04(日) 21:09:44.03
洋書買え
大学のサイト見れ
892デフォルトの名無しさん:2011/09/04(日) 23:22:15.33
参照とconst参照で大体書けてしまうので、値渡しとポインタ演算をほとんど使わなくなったのですが、何か問題あったりしますか?
893デフォルトの名無しさん:2011/09/04(日) 23:25:52.16
それで書けてるんなら問題ないんじゃないかな
894デフォルトの名無しさん:2011/09/04(日) 23:39:53.84
>>893
ありがと、了解です。
895デフォルトの名無しさん:2011/09/05(月) 00:11:25.21
>>884
pgr
896デフォルトの名無しさん:2011/09/05(月) 00:34:33.69
897デフォルトの名無しさん: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]としても
エラーで読み込むことができませんでした
番号と名前だけ変数に取るにはどうすればいいですか?
898デフォルトの名無しさん:2011/09/05(月) 01:44:08.33
%[^,]s
こんな書き方あったっけ?
899デフォルトの名無しさん:2011/09/05(月) 01:45:52.10
> 2回目のループでエラー
って"ふりがな"と"電話番号"を (2回目の) &i, &str に格納しようとしているからでそ?

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

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

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

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

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

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

922デフォルトの名無しさん:2011/09/08(木) 17:12:24.68
>>920
constを付けてると却って馬鹿みたいに見えるな
923デフォルトの名無しさん:2011/09/08(木) 19:48:58.24
関数化することで処理に名前が付くのも良い
コメントを書いてるのと同じ意味になる
もちろんhoge()とか付けたら意味内が
924デフォルトの名無しさん:2011/09/09(金) 05:04:50.97
構造化はソースコードが見やすくなるだけで幸せ。
925デフォルトの名無しさん:2011/09/09(金) 09:24:40.80
みんなはCでTDDどうやってる?
926デフォルトの名無しさん:2011/09/09(金) 09:25:38.03
>>925
その質問飽きた。
927デフォルトの名無しさん:2011/09/09(金) 09:27:07.18
Cやアセンブラで間に合うような分野なら
テストみたいな生ぬるいものじゃなくてそれこそ形式手法使ってるだろうな
928デフォルトの名無しさん:2011/09/09(金) 14:41:19.84
>>926
回答してやれよ
929 忍法帖【Lv=40,xxxPT】 :2011/09/09(金) 16:41:35.40
答えられないから飽きるんだよw
930デフォルトの名無しさん: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++ではできないのはなんで?
こっちのほうがコードが綺麗に書けると思うんだけど
931デフォルトの名無しさん:2011/09/09(金) 16:55:12.04
古い書き方だから
932デフォルトの名無しさん:2011/09/09(金) 17:23:52.83
>>930
>int a, b, c ;
無駄
933デフォルトの名無しさん:2011/09/09(金) 23:28:43.94
dllライブラリ作ってるんですけど、初期化が必要な場合
グローバルな関数を呼び出しさせるのか、インスタンス作らしてメンバ呼び出すのかどちらがいいでしょうか
934デフォルトの名無しさん:2011/09/09(金) 23:32:23.30
>>933
アタッチ時に初期化できるでしょ
935933:2011/09/09(金) 23:35:55.56
あぁ、勘違いした
DLLに限ったことじゃないしお好みでいいと思うよ
936デフォルトの名無しさん:2011/09/09(金) 23:42:12.19
>>933
DLLの中身による。
937デフォルトの名無しさん:2011/09/10(土) 17:47:09.98
ありがとうございます

>>935
>>936
938デフォルトの名無しさん:2011/09/10(土) 19:08:12.36
>>917
メンバ変数をクラス内グローバルだとか、関数内での動きが見えないとかと
病的に嫌って引数と戻り値だけでやりとりしていた人がいたけど
もはや何の為にクラス使ってんのって話だよ。
939デフォルトの名無しさん:2011/09/10(土) 21:36:20.08
みんなはCでTDDどうやってる?
940デフォルトの名無しさん:2011/09/10(土) 21:41:02.65
>>939
その質問飽きた。
941デフォルトの名無しさん: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だからと甘えたソースの多いこと多いこと。
関数を細切れにするのなら、尚のことメンバ変数経由の値変更なんてするものじゃないと思ってる。
942デフォルトの名無しさん:2011/09/14(水) 02:46:18.08
> 呼び出し側からは何を変更しているのか全く分からない

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


> 関数を細切れにする
これも意味不明
943デフォルトの名無しさん: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; }
}

極端な話、こういうバカを懸念しろってことか?
944デフォルトの名無しさん: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。
945デフォルトの名無しさん:2011/09/14(水) 03:25:59.77
>>942
忘れた頃にクラスの仕様を変更しろって言われたらどうすんの?
どこで何が変わっているのかも気にしないで、またバカみたいにメンバの変更箇所を探すの?
946デフォルトの名無しさん:2011/09/14(水) 03:30:13.31
どっちにしろ変更箇所を探さないといけないのは当たり前だろ
947デフォルトの名無しさん:2011/09/14(水) 03:36:25.88
そんな考え方で安易にグローバル変数を量産されたら困るんだよ。
948デフォルトの名無しさん:2011/09/14(水) 03:37:48.10
メンバ変数の話じゃなかったのか・・・
949デフォルトの名無しさん:2011/09/14(水) 03:42:41.58
メンバ変数ってのは、クラス内のどこからでも変更可能なわけで。
950デフォルトの名無しさん:2011/09/14(水) 03:54:55.54
どんだけ病的なんだ
951デフォルトの名無しさん:2011/09/14(水) 04:11:11.39
>>945
>>949
初歩的な事さえ理解できていないのに
優劣を語る資格はないよ
952デフォルトの名無しさん:2011/09/14(水) 04:15:29.09
>>951
そうやって逃げ続けてるから、いつまで経っても人に迷惑のかかるコードしか書けないんだよ。
953デフォルトの名無しさん:2011/09/14(水) 04:26:50.11
コードなんて書いたことすらないグーグル勢だろ
>>943を見てブロックを超える広域変数は普通にヤバいと思ったわ
954デフォルトの名無しさん:2011/09/14(水) 04:32:45.16
>>951
privateでもクラス内でグローバルだよ
constと勘違いしてない?
955デフォルトの名無しさん:2011/09/14(水) 04:51:39.45
スレを閉じて枕に突っ伏しているのか、反論を必死に検索中なのか知らんが、
自分で考える力も無いのに聞いたような話で水を差すのはどうかと思うねw
956デフォルトの名無しさん:2011/09/14(水) 04:53:38.85
オブジェクト指向なんてクソだと思ってるオレでも
941がパラダイム未修得のトーシロと判断するわ
957デフォルトの名無しさん:2011/09/14(水) 04:59:17.18
お、なんかそれっぽい言葉を見つけてきたみたいだねw
反論としては全く機能していないけど。
添削してあげるからまずはコードを書いてみ?
958デフォルトの名無しさん:2011/09/14(水) 05:31:18.49
30分も与えられて簡単なクラス1つ書けねーのか。
ゴミにも程がある。
959デフォルトの名無しさん:2011/09/14(水) 06:43:17.13
>>951
お前が分かってないじゃん
どこにアンカ付けてんの?
960デフォルトの名無しさん:2011/09/14(水) 06:54:59.06
とりあえず否定しておけば、誰かが何か言ってくれるとでも思ったのでしょうよ。
馬鹿な上に、甘ったれ。
おそらく学生だろうが、それ以前に人間として話にならん。
961デフォルトの名無しさん:2011/09/14(水) 07:33:13.86
お前らこんなくだらないことで盛り上がれて楽しそうだな。
962デフォルトの名無しさん:2011/09/14(水) 08:22:40.55
というかメンバ変数絞って使うのは常識でないの。
何があろうと一切使わない、は病的だけど。
963デフォルトの名無しさん:2011/09/14(水) 13:41:00.08
うむ。2chは肥溜めということがよくわかる良い議論であった。皆の者もう下がって良いぞ
964デフォルトの名無しさん:2011/09/14(水) 14:23:28.68
>>963
馬鹿
965デフォルトの名無しさん:2011/09/14(水) 14:44:27.92
>>964
アホ
966デフォルトの名無しさん:2011/09/14(水) 14:48:25.67
>>965
まぬけ
967デフォルトの名無しさん:2011/09/14(水) 15:01:23.35
>>966
uy
968デフォルトの名無しさん:2011/09/14(水) 15:01:23.72
>>966
とんま
969デフォルトの名無しさん:2011/09/14(水) 15:02:21.78
>>964-968
うむ。2chは肥溜めということがよくわかる良い流れであった。皆の者もう下がって良いぞ
970デフォルトの名無しさん: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
ここをざっと読んだ後に標準語で話してもらえないか?
971デフォルトの名無しさん:2011/09/14(水) 20:23:24.37
普通に言ってること分かるけど
アスペ?
972デフォルトの名無しさん:2011/09/14(水) 20:27:34.76
次スレよろしく
973デフォルトの名無しさん:2011/09/14(水) 20:33:49.86
974デフォルトの名無しさん:2011/09/14(水) 20:40:47.35
で、結論は?
975デフォルトの名無しさん:2011/09/14(水) 20:46:42.03
お前らはうんこ
976デフォルトの名無しさん:2011/09/14(水) 20:49:11.88
>>962でFA.
引っ張るようなレベルの話ではない.
続きは宿題スレでどうぞ.
977デフォルトの名無しさん:2011/09/14(水) 21:05:28.72
何仕切ってんだテメー
978デフォルトの名無しさん:2011/09/14(水) 21:07:26.65
やんのか?ああ?
979デフォルトの名無しさん:2011/09/14(水) 21:28:58.82
いいぜ表出ろや
980デフォルトの名無しさん:2011/09/15(木) 00:15:48.92
>>1-979
うむ。2chは肥溜めということがよくわかる良い流れであった。皆の者もう下がって良いぞ
981デフォルトの名無しさん:2011/09/15(木) 00:18:28.00
スレを勃てるまでもないC/C++の質問はここで 20
http://hibari.2ch.net/test/read.cgi/tech/1316013463/
982デフォルトの名無しさん:2011/09/15(木) 00:24:55.50
最近C++の本を買って来たのですが、家に帰ってくるとくたびれてしまいその本を読む前に寝てしまうのですがどうすれば良いですか?
983デフォルトの名無しさん:2011/09/15(木) 00:26:00.35
その本を枕に眠ればいいと思うよ
984デフォルトの名無しさん:2011/09/15(木) 00:34:40.19
試しに使ってみたら案外寝心地が良かったので、これからは枕として活用したいと思います
ありがとうございました。
985デフォルトの名無しさん
そんなんじゃ、お先真っ暗だな。