1 :デフォルトの名無しさん2011/06/15(水) 11:47:04.75
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++でのマルチスレッドプログラムのいい参考図書とかないですか?
140 :デフォルトの名無しさん2011/06/28(火) 01:37:17.01
>>4
Cはもう暫くするとマルチスレッド対応になるよ
5 :デフォルトの名無しさん2011/06/17(金) 20:52:41.40
矢印キーが押されたかどうかを判定する関数を教えてください
6 :デフォルトの名無しさん2011/06/17(金) 21:00:19.42
>>5
windowsならWM_KEYDOWNイベントを監視すれば
7 :52011/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すれば解決は早いだろう
11 :82011/06/18(土) 22:17:30.63
長文になってしまい分割します。
恐縮ですがお願いします。

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

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

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

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

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
17 :デフォルトの名無しさん2011/06/19(日) 00:04:02.41
クラスのメンバ関数宣言時に
static メンバ関数ってやればいいよ
22 :デフォルトの名無しさん2011/06/19(日) 02:18:33.58
>>17
ありがとうございます。
20 :デフォルトの名無しさん2011/06/19(日) 01:15:32.92
DirectShowのFilterGraphみたいなGUIを作りたいんですが、何か簡単な方法ないですか?
フォームアプリケーションだと難しそうで
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;
26 :デフォルトの名無しさん2011/06/19(日) 19:43:04.67
ありがとう。えぐいですね。それを返す関数は、あーでもないこーでもないとやった結果
char *(&a())[3];
とさらにえぐかったです。
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の"*"要らない
ポインタの理解がまったく足りてないので
勉強しなおせばいいよ
33 :282011/06/20(月) 14:38:31.77
>>29-32 ご助言ありがとうございます。sprintf_sの方は言われて見れば%sは文字列の先頭を送るんですから、実体送るだなんて大間違いですね・・。
そしてsizeof・・・実体の大きさを測ってもらう と思っていたら大間違いなんですね。
ポインタが指す変数のサイズをちゃんと測ってくれるものなんですね。
双方思った通りには動いてくれましたが、まだ何か勘違いしているかもなのでポインタについて再学習を始めました。 
あまり人様の見よう見まねでコードを継ぎ接ぎしない方が身の為ですね・・。色々ご助言ご指摘、ありがとうございました。
31 :デフォルトの名無しさん2011/06/20(月) 13:18:53.61
こりゃぁ理解まで遠いわ、というのがイッパツでわかるなw
よくわかってないのにやろうとしてるのが丸見えになってる。
32 :デフォルトの名無しさん2011/06/20(月) 13:37:44.64
> よくわかってないのにやろうとしてるのが丸見えになってる。
これをクリアしないと前に進めない。
よくわかってないのにやろうとするのは悪くない。ただなかなか前へ進めないだけだ。
水前寺清子も歌ってる。でも3歩より下がってはいけない。
34 :デフォルトの名無しさん2011/06/20(月) 14:53:07.08
意外と検索能力高かったな
延々と質面攻めになるのかと思ってたwwwwww
35 :デフォルトの名無しさん2011/06/21(火) 01:39:12.73
C++は名前空間があるから大規模開発でも問題なくやれるよね〜
42 :uy ◆yyC0rYWEq2 2011/06/21(火) 20:09:16.04
>>35
おまえそれ本気でいってんならマジでレベル低い
C,C++しかやったことないのか?市ね世ゴミ
ネームスペースとかゴミみたいな概念でしかない
本来やたら、それは使うべきではなく

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

マジでゴミなんだな・・・・・・・・・・・・・・
36 :デフォルトの名無しさん2011/06/21(火) 07:04:39.15
GUIでプログラムを作りたいんですが何かおすすめのライブラリとかあります?
37 :デフォルトの名無しさん2011/06/21(火) 12:19:04.39
>>36
Qt
40 :デフォルトの名無しさん2011/06/21(火) 16:46:52.15
触れる手順を強要し自分をさらけ出さない女王様タイプがクラス
股を開いて好きにしてと半マグロタイプが構造体

どっちも調教しだいなんだけどな
41 :uy ◆yyC0rYWEq2 2011/06/21(火) 20:06:15.32
>>40
きもちわりーんだよ死ね
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()があるということは、
メモリの連続性というのは保証されているのでしょうか?
(可変長なのに、どうやって連続性持たせているのかは、私にはさっぱり想像もつきませんが)
67 :デフォルトの名無しさん2011/06/23(木) 12:20:41.03
>>47
C++0xより前では連続性は保証されていない
ただ、普通に触れる処理系ならまず大丈夫なので気にする必要はない(0xより前の古いものでも大丈夫、つかダメなの聞いたことがない)
可変長なのに連続しているのは単に現在確保してるメモリを超えるなら確保しなおしてるだけだよ
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代入どっちが速いの?
57 :デフォルトの名無しさん2011/06/22(水) 23:57:16.17
どっちかが速かったにしろ、
++と、+=1(リテラルの1を加算)だったら、
コンパイラが速いほうに統一してくれるだろ。
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秒くらいでしょうか・・)

もっと素早く処理するにはどうすれば良いでしょうか?
66 : 忍法帖【Lv=9,xxxP】 2011/06/23(木) 12:19:35.73
>>63
strcat()しない。
どうせfputs()するんだから、最初からfprintf()してしまえばいい。
多少は早くなるはずだ。
それでダメなら、fprintf()もやめて小刻みにfputs()かな。
cygwinみたいな環境でもなければ、どうせバッファリングされるから。

つーか、大した量だよw
68 :デフォルトの名無しさん2011/06/23(木) 12:23:35.50
40秒が連結の処理のせいでかかってる時間とは思えないから
単に端末の問題じゃ?fputsコメントアウトしたら一瞬で終わるか?
71 :デフォルトの名無しさん2011/06/23(木) 12:33:19.17
確かに。2GBの配列でメモリスワップしてたり。
5000行持つのを諦めるとか、可変長にするとかしないと根本解決にならない気が。
72 :デフォルトの名無しさん2011/06/23(木) 13:14:09.19
2GBを「大したデータ量ではない」とか、すごい時代になったもんだ。
73 :632011/06/23(木) 13:37:09.99
色々なご意見ありがとうございます。
fputsを減らさないと重くなる と先入観が有ったのですが、
strcatを全部消してfputsだけにしたら2秒弱で終わりました;
時と場合でやり方は変えないとだめなんですね。 ありがとうございました。
74 :632011/06/23(木) 13:42:02.48
2GB・・・2MB・・?(´・ω・`)
76 :デフォルトの名無しさん2011/06/23(木) 14:57:55.58
79 :632011/06/24(金) 23:43:56.48
大き過ぎるから仮想メモリに確保されている・・? んですね。 ありがとうございました。
80 :デフォルトの名無しさん2011/06/25(土) 21:48:20.84
映像のフレームを定期的に処理するプログラムを作っています。
たとえば30fpsですと33.33ミリ秒周期なので処理間隔を33ms or 34msにして1秒間あたりの
処理フレームが設定どおりにしたいと考えています。
で、間隔を33msにするか34msにするかというところの処理を書いてみたのですが、
もう少し良い書き方が無いものかご教示お願いします。
81 :802011/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++;
 }
}
82 :802011/06/25(土) 21:51:37.84
何度もすいません。
fps値と入力映像の時間は外から与えるようにする予定です。
83 :デフォルトの名無しさん2011/06/25(土) 22:18:42.02
何度も糞レスしやがって!
ゲーム小僧死ねよ
89 :802011/06/25(土) 23:32:27.28
>>83-84
拙いコードで恐縮です。
ゲームではありません。
センスが無いのは承知しておりますが
他に食べ方を知らないのです。
申し訳ないですがご教示願えれば幸いです。
84 :デフォルトの名無しさん2011/06/25(土) 22:21:26.65
コーディングにセンスないね君。プログラミング止めたほうが良いよ
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
90 :デフォルトの名無しさん2011/06/25(土) 23:43:34.81
食ってるとまで言うかねえ?
2ちゃんでそれを聞くような人が。
91 :802011/06/26(日) 00:17:41.15
>>90

「食べてる」というのは偉そうな書き方でしたでしょうか?
転職するあてもないという意味です。
97 :デフォルトの名無しさん2011/06/26(日) 15:56:43.38
C++の仮引数の省略ってコンパイラが適当に引数を付加して処理しているの?
98 :デフォルトの名無しさん2011/06/26(日) 15:59:46.13
そうだよ
100 :デフォルトの名無しさん2011/06/26(日) 18:09:57.57
>>98
どうもです
99 :デフォルトの名無しさん2011/06/26(日) 18:09:28.68
いまだにprintf使っているアホはいい加減死ねよ
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

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

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

みたいのをずっと引きずってるように見えてならない。
110 :デフォルトの名無しさん2011/06/26(日) 23:20:10.46
ただのビジュアル的なもののためだけに
名前空間使いまくっている馬鹿をどうにかしてください
113 :デフォルトの名無しさん2011/06/27(月) 01:59:31.92
>> 111 いやいや。
ミニ言語になってしまってる C のフォーマット関数がまづ問題で
フォーマッタ出力とストリーム出力機能を別モノにしまってイイのかという問題もあるし(sprintf とか便利だけどなんか歯痒いじゃん?
オブジェクトの役割的にiostream 自体がデフォで中間状態をもってイイのかてのもあるし
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;
}
136 :デフォルトの名無しさん2011/06/28(火) 00:44:27.39
>>122
imbue()しなきゃだめだろ
処理系が韓国語に対応してるか調べてみ
無理ならgccのeucで試してみるとか
143 :デフォルトの名無しさん2011/06/28(火) 02:24:51.92
>>122
gcc4.5.2(MinGW) + Eclipse CDTでimbueする事無く普通に表示されたぞ
多分入力コードが10進UNICODEになってるのがまずいんじゃないか?

UNICODEにしたら普通に表示された
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つかう
127 :デフォルトの名無しさん2011/06/27(月) 22:12:17.66
>>125
charで書き込み(読み込み)したいんですよ。
128 :デフォルトの名無しさん2011/06/27(月) 22:14:01.12
文字列型使えよ
130 :デフォルトの名無しさん2011/06/27(月) 23:57:31.22
>>125
ありがとう、いろいろ調べてるうちにそのほれにたどり着いたけど、処理超面倒だね
>>128
文字列型ってstring?unicodeで使ったらまともに動作しなくね?
132 :デフォルトの名無しさん2011/06/28(火) 00:03:51.93
>>130
TCHR
あたりで
129 :デフォルトの名無しさん2011/06/27(月) 23:55:46.00
char *hoge[]

char hoge[]
の違いがわかりません
131 :デフォルトの名無しさん2011/06/28(火) 00:02:56.19
>>129
char *hoge[255]みたいな宣言だとすると
*hoge[255]=*hoge×255
hoge[255]=hoge×255
133 :デフォルトの名無しさん2011/06/28(火) 00:04:46.35
>>131
ちがうよ
134 :デフォルトの名無しさん2011/06/28(火) 00:06:13.53
>>131
>>133
どうなんですか?
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;


あり・なしを比較するとこういうイメージなのですが
150 :デフォルトの名無しさん2011/06/28(火) 11:22:27.10
>>138
関数の仕様がおかしいんじゃね?
グローバル変数を使う位なら引き数要らないだろ。
つーか、グローバル変数を使う積極的理由がない。
例えば、関数1の中でageその他に触れたいなら、
・ageその他を構造体に纏めて参照渡しにする。
・ageその他を構造体に纏めてポインタ渡しにする。
・ageその他を構造体に纏めて引き数で渡して戻り値で受け取る。
の三択でいいよ。
158 :1382011/06/28(火) 17:50:45.96
>>150
確かにグローバル変数をつかっているのに引数はおかしな話でした。

まとめて渡すとなると

struct hito{
age
sex
no
}

struct hito eigyo[10];

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

ってイメージですかね
144 :デフォルトの名無しさん2011/06/28(火) 02:40:10.23
getline関数で文末判定はどうすればよいのでしょう?

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

行末ならgetlineで問題ないですが・・・
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
151 :デフォルトの名無しさん2011/06/28(火) 17:08:29.67
なんでC/C++はスレッドライブラリが標準でないんでしょうか。
標準であればもっとわかりやすいと思うんですが。
155 :デフォルトの名無しさん2011/06/28(火) 17:21:35.02
最適化の抑制をどうすればいいのかわからん
157 : 忍法帖【Lv=12,xxxPT】 2011/06/28(火) 17:49:23.05
>>155
つ[volatile]
156 :デフォルトの名無しさん2011/06/28(火) 17:48:55.47
文字列『0 1 3 1 0 3 2 1 3 0』みたいな変動するデータがあるとして
それをsscanf系で配列に格納したいのですが
スマートなコードの書き方ってないですか?
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")
164 :163ではない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
まじか、そうだったのか
ありがとうございます
169 :1682011/06/28(火) 23:05:06.29
RECTとPtInRectを理解できました(思い通りの実行結果になってくれました)

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

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


176 :1732011/06/29(水) 04:43:25.89
シャワーを浴びたら、解決方法が思いつきました(駄目かもしれないけど)

スルーしてください
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
}

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


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

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

さっさとC,C++を捨てること
183 :デフォルトの名無しさん2011/06/29(水) 07:39:58.63
つか根本的になにもかも間違ってるから無視してやったほうがいい
185 :1782011/06/29(水) 09:05:01.17
構造体は同一ファイル内の関数なら利用可能だが
別ファイル(ヘッダーファイル等)の関数では利用できない

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

って感じですか?
187 :デフォルトの名無しさん2011/06/29(水) 09:08:28.65
>>185
全く違う
class と structは
メンバと継承のときにpublicとかprivateとかつけなかったときのデフォルトが違うだけで他は全く一緒

(一応typeidしたときのname()も違うが)
186 :デフォルトの名無しさん2011/06/29(水) 09:08:08.10
どこにそんなことが書いてあったんだ?
structもclassもそんなに違わない
最初からついてるアクセス指定子がprivateかpublicかの違いだけ
構造体もヘッダで宣言すればincludeしたcppから使える
188 :1782011/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()をヘッダーファイルに表記すると動作しなくなってしまって

190 :デフォルトの名無しさん2011/06/29(水) 09:36:09.74
>>188
宣言が見えなきゃ使えるわけないだろ
複数のcppファイルから構造体使いたいならヘッダに宣言しとけ
191 :デフォルトの名無しさん2011/06/29(水) 09:38:32.89
動作以前にコンパイルできねーだろ。コンパイラ通さなくても一目瞭然にわかる。
192 :1782011/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にするのは分割コンパイルってのをしたいんだよ
それがどういうものかはググッてくれ
説明すると長いから
195 :uy ◆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;  ← これで先に名前だけ押しておく必要がある
196 :uy ◆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++
197 :uy ◆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++を知らないんですよ。そっとしておきましょう。
201 :uy ◆KOAgYBL/Xg 2011/06/29(水) 13:04:26.94
C++なんて許されるのは19歳までだろ・・・・・
20超えてもC++やってる奴は低脳

いつまで無駄なことを続けるんだか
202 :デフォルトの名無しさん2011/06/29(水) 13:11:54.05
そうだねー
ApacheやUNIXやFirefox書いてる奴は低脳ですよね
204 :uy ◆KOAgYBL/Xg 2011/06/29(水) 13:34:14.45
>>202
そういう奴らはC++なんて使ってないんだよ
仕事で扱ってるだけ。おれもC++を仕方なく「扱う」時はあるよ。
205 :デフォルトの名無しさん2011/06/29(水) 13:38:31.82
なぜ仕方なく扱わなきゃいけないんですかねー?
なぜリプレースしようとするプロジェクトが出てこないんですかねー?
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
オーバーロードはオーバーロード
ポリモフは継承&オーバーライド
211 :デフォルトの名無しさん2011/06/29(水) 23:12:09.74
オーバーロードをポリモーフィズムって説明してる人もいるよ・・・
213 :デフォルトの名無しさん2011/06/29(水) 23:43:17.93
>>211
カンタンに想像付くから怖い。
「〜はデザパタの一種と言えるでしょう」
「俺俺デザパタつくってみました」
「オーバーロードはポリモの一種」

不正確なもんを押し通そうとする力が怖い。
212 :デフォルトの名無しさん2011/06/29(水) 23:14:36.02
オーバーロードがポリモー・フィズムってwww
おまえほんとにオブジェクト指向りかいしてんのかおwww
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};と設定するのではなく

全部入らない場合の配列の空きスペースをみつけて埋めるという処理がしたいので
219 :デフォルトの名無しさん2011/06/30(木) 09:20:31.41
>>215
std::vector<int> hoge;
if(hoge.empty())
{
}
というのは可能だ 参考までに
216 :デフォルトの名無しさん2011/06/30(木) 05:11:22.97
例えばhogeに入れる値が負の値を取らないと決まっているなら、
hogeの要素全てにあらかじめ-1でも入れておいて

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

とでもすればよろし。
218 :デフォルトの名無しさん2011/06/30(木) 06:45:19.92
>>216
構造体の配列だから入れてからだと面倒かと思ったのですが、普通にそうやることにします
217 :天使 ◆KOAgYBL/Xg 2011/06/30(木) 06:02:38.20
C,C++で空 なんてのはねーんだよ
NULLさえ実装されていない
だから何らかの初期値を与えるしかな、 基本的にそれには0を使うのがベスト
0って数字もときより使う配列ならマイナス数値とかにして、「ごまかす」しかない

Cなんてさっさとやめちゃえよ
222 :デフォルトの名無しさん2011/06/30(木) 10:01:07.41
それ以前に
int hoge[5]で
hoge[5]はねーだろそこを指摘しろよ

>>217
ぬるぽはC++では作られたろーがボケ
236 :天使 ◆uL5esZLBSE 2011/07/01(金) 11:43:40.31
>>222
ハッァァァァァァア????
221 :デフォルトの名無しさん2011/06/30(木) 10:00:55.10
> 全部入らない場合
よくわからん
そもそもhoge[5]なんて存在しないぞ
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]に改行(?)データが入るのか、隙間が出来てしまいます
どうすれば空データ(改行?)を回避できるのでしょう
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
それでいいよ
それが一般的
260 :デフォルトの名無しさん2011/07/01(金) 23:25:23.04
>>230-232
Cでは'0'から'9'が連続していることが保証されているべえ?
232 :デフォルトの名無しさん2011/07/01(金) 09:00:57.09
文字コード依存だから正解はないよ
262 :デフォルトの名無しさん2011/07/01(金) 23:30:07.09
>>260
>>232が馬鹿なだけだから気にすんな
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);
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
なんだその負け惜しみは。
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++使えないのがコンプレックスなの?
252 :デフォルトの名無しさん2011/07/01(金) 19:23:42.42
uyが おきあがり
なかまに なりたそうに こちらをみている!
なかまに してあげますか?
256 :天使 ◆uL5esZLBSE 2011/07/01(金) 20:02:49.20
C++バカは効率の悪さにいつまでたっても気づけナイ
C++バカって言葉いいな 今度からそうよぼう
だってバカの一つ覚えみたいなもんだし
258 :デフォルトの名無しさん2011/07/01(金) 23:07:19.50
>>256
ライブラリ多いじゃん
259 :デフォルトの名無しさん2011/07/01(金) 23:20:13.05
あらゆるプログラミングパラダイムを
プロセッサ時間メモリ空間で最善になるようにかける言語
その次に大規模開発 最後に手軽さ
261 :デフォルトの名無しさん2011/07/01(金) 23:29:04.98
C/C++ではA〜Zなんかは連続していることは保障されてないが、
0~9については保証されてるな
263 :天使 ◆uL5esZLBSE 2011/07/02(土) 00:03:01.26

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

本気でC++なんだね^^;
一生やっててください
265 :デフォルトの名無しさん2011/07/02(土) 06:19:02.59
>>263
「キリッ」って。
茶化してるってことは、痛いところつかれて反論できないってことか。
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++の代用になるお勧めの言語はなんですか?
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行目以降の先頭の文字列を読み取れるのでしょうか?
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,}

というプログラム
270 :デフォルトの名無しさん2011/07/02(土) 11:11:27.33
char a[4]={'a','a','a','a'};
char b[4]="aaaa";

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

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

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
>>277
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"
}
参照するだけならこの方法で問題ないという事は理解してます
284 :デフォルトの名無しさん2011/07/03(日) 01:23:04.93
コンストラクタってオブジェクト呼び出し時に実行されるけど
そのときの引数ってどうやってるの?
285 :デフォルトの名無しさん2011/07/03(日) 07:13:51.17
4000バイト未満も文字列データの外部ファイルが4つあるとして

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

一番最初にfopenで4データを呼び出して、staticな配列に入れておいて
その配列を使いまわすのではPCの処理的にどちらが良いのでしょう?
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のデータをメモリ上に保持する事なんて屁でもない。
286 :デフォルトの名無しさん2011/07/03(日) 08:12:03.71
http://ideone.com/oTjlA

途中から計算がおかしくなってしまうのですがどうすれば正しく動きますか?
291 :デフォルトの名無しさん2011/07/03(日) 11:34:18.45
そういう話じゃないでしょ
294 :デフォルトの名無しさん2011/07/03(日) 12:18:30.19
>>291
そういう話じゃないならどういう話だよ。
292 :デフォルトの名無しさん2011/07/03(日) 11:48:15.02
メモリの話になって今更どのくらい消費しているのかと気になったんだが
ショボいプログラムでも55MBも使っていた・・・・

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

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



って何度もいっているのにバカは効率を理解しない
301 :デフォルトの名無しさん2011/07/03(日) 17:31:24.92
>>298この人ってどのスレでもあたかも全てが敵であるかのように振舞ってるよね
統合失調症とかいうやつかな?かわいそう
300 :デフォルトの名無しさん2011/07/03(日) 17:28:59.99
もう俺がゴミカスでいいから、宗教論争を終わりにしてくれないか
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より省メモリになり得る。
308 :デフォルトの名無しさん2011/07/03(日) 22:09:00.38
>>305
sortしてからならbinary_search出来るが、mapやsetは内部データ構造が初めから二分木
(大抵赤黒木、実装依存)
307 :デフォルトの名無しさん2011/07/03(日) 22:02:37.05
bit長を調べるにはどうしたらいいでしょうか。
具体的には1024bitになるまで0をstring型変数に追加していきます。
str = str + "0" みたいな感じです。
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');
}
312 :デフォルトの名無しさん2011/07/03(日) 22:48:34.02
<<310
ありがとうございます。ものすごく参考になりました。
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」
っていう言語仕様ですね。
320 :デフォルトの名無しさん2011/07/04(月) 21:58:14.42
Visual C++のRuntime 2005、2008、2010を入れようと思っています。

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

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

よろしければご教示お願いします。
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足しても増えなくなるよ
そこまでは整数と扱って問題ない
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
整数のみの計算をしていても、誤差で少数になってしまう場合もあるのかどうか、ってのが知りたかったんだ
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
それなら何も問題はないや、安心した!
334 :デフォルトの名無しさん2011/07/05(火) 16:53:41.52
http://www.kouno.jp/home/c_faq/c14.html#5

実数を比較する方法を常に使っていたら、整数として扱ってても
問題ないんじゃね。
338 :デフォルトの名無しさん2011/07/05(火) 21:31:25.74
C++は異なる複数の型が混在する連想配列って作成できるのでしょうか。
mapとかはキー値とバリュー値の宣言をしなきゃいけないみたいですし。
340 :デフォルトの名無しさん2011/07/05(火) 21:38:16.12
>>338
boost.any
341 :デフォルトの名無しさん2011/07/05(火) 22:02:00.30
>>339
>>340
ちょっと調べてみましたがCで言うvoid型みたいなものっぽいですね。
テストプログラム書いてみます。ありがとう。
339 :デフォルトの名無しさん2011/07/05(火) 21:37:59.47
boost::anyでも突っ込んだら
342 :デフォルトの名無しさん2011/07/06(水) 07:15:52.41
C/C++上でアクターモデルを実装する方法はありますか
343 :デフォルトの名無しさん2011/07/06(水) 08:16:07.48
346 :デフォルトの名無しさん2011/07/06(水) 09:00:33.09
>>343
すごい。やっぱ知ってる人は知ってるんだな。
これって副作用については自己責任なのかな。読んでみます。
ありがとう。
347 :デフォルトの名無しさん2011/07/06(水) 09:47:58.59
>>346
知ってるのはオレじゃなくてgoogle先生。
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つずつ入れるしか無い・・・?

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に分解したら画像の段階にきてしょんぼりだった…
352 :デフォルトの名無しさん2011/07/06(水) 22:57:38.07
>>350
asin,acos
351 :デフォルトの名無しさん2011/07/06(水) 22:41:22.60
逆三角関数でぐぐれ
逆関数自体は高3あたりの内容だろ
354 :デフォルトの名無しさん2011/07/06(水) 23:33:21.60
>>351-353
ああ、逆関数…そうか
arcsin arccosは習ってなくともちょうど高3で逆関数は習ってたところだった
逆関数の意味をもうちょっと深く考えるべきだった、感謝です
355 :デフォルトの名無しさん2011/07/07(木) 22:16:52.28
クラス名やメンバ関数は頭文字は大文字で書く習慣でもあるの?
361 :デフォルトの名無しさん2011/07/07(木) 23:24:12.35
>>355
キャメルとかパスカルとかスネークとかでググれ
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型じゃなくて自分で定義したクラスです
363 :デフォルトの名無しさん2011/07/08(金) 12:42:55.30
すみません。
SubCommon.hに書いた構造体の宣言 struct DATAPACK { int t; };
これを
DataManage.hで #include "SubCommon.h"してから
struct DATAPACK datapack_A; と実体を作ろうとすると、定義されていないと警告が出ます。

不可解な事にほぼ同じ事を別の2組のヘッダーで行うと問題なく実体が作れるのに
なぜ未定義となってしまうのでしょうか?
うっすらでも思い当たる事が有ればご指摘頂けますと幸いです。
365 :デフォルトの名無しさん2011/07/08(金) 12:57:37.65
>>363
実はインクルードされてないのでは?
インクルードガードが邪魔してるとか。
366 :3632011/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
かわらない
405 :デフォルトの名無しさん2011/07/10(日) 12:46:22.30
つか>>367って同じコードじゃないよね
i=10で死ぬ
406 :デフォルトの名無しさん2011/07/10(日) 12:48:52.42
>>405
つかそれって既出だよね
370 :デフォルトの名無しさん2011/07/09(土) 11:15:27.85
無意味に速度を気にしだした初心者の臭いがする

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


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

わかりやすさ重視にしておきます
372 :デフォルトの名無しさん2011/07/09(土) 11:25:07.37
>>371
プログラマとしてやっていくなら、死ぬまで有効な格言を教えよう。
KISS。これはどこまでいっても役に立つ。
384 :デフォルトの名無しさん2011/07/09(土) 12:40:20.07
>>367 >>371
わかりやすさ重視ってif二つを採用するんじゃないだろうな。

if二つのほうは、二つの条件を見比べて、かつ最初のifの中でiが変化してないって
確認しないと排他条件になってるって理解できないからわかりにくいぞ。
386 :デフォルトの名無しさん2011/07/09(土) 15:10:28.61
>>384
2つの条件以上増えないと確定しているならif2つよりelseのが分かりやすいが
暫定的であって今後条件が3つ4つと増える可能性があるプログラムなら、ifを2つにしておいたほうが拡張しやすくね?
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
それは嫌ですが
このあたりで止めにしましょう
この話題はこれで終了ということで
380 :デフォルトの名無しさん2011/07/09(土) 11:51:33.39
>>377
あ?逃げてんじゃねーよ
切腹だ切腹。はやくしろ
みんないつもお前には迷惑してんだよ
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で初期化する意味を教えてください。
381 :デフォルトの名無しさん2011/07/09(土) 11:52:31.38
>>378
>char型配列をNULLで初期化する
この表現がよく分からないな、詳しくたのむ
385 : 忍法帖【Lv=21,xxxPT】 2011/07/09(土) 13:01:43.61
つーか、iが10のときの振る舞いが違ってしまっている。「以上」なら>=にしないと。
387 :デフォルトの名無しさん2011/07/09(土) 15:23:12.56
if (cond) {

} else {

}


if (cond) {

}
if (!cond) {

}
と書くのはちょっとないわ。
388 :デフォルトの名無しさん2011/07/09(土) 16:31:58.47
>>387
上と下では意味が違う場合がある
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 で書けばよいのですね
わかりました
ありがとうございます
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ほどでしか無いほどを理解してないとか
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
当たり前だ
401 :デフォルトの名無しさん2011/07/10(日) 11:20:27.03
仮想メモリじゃなくて仮想記憶とか仮想アドレスだ
仮想メモリじゃOSのメモリ内容退避する機能ばっかでてくるわ
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
保守
仕事
趣味

レスのルーチンを理解出来てないな
プログラムより日本語を勉強した方が良いな
414 :デフォルトの名無しさん2011/07/10(日) 14:03:07.79
半角スペース区切りのファイルから読み取って
クラス内の変数に次々代入ってどうやるの?
417 :デフォルトの名無しさん2011/07/10(日) 14:17:51.93
>>414
Luaでやるといいよ
418 :デフォルトの名無しさん2011/07/10(日) 15:22:09.65
>>414
ん?普通にやればいいんじゃないかと思ってしまうんだが、
特別な用件でもあるのだろうか?
415 :デフォルトの名無しさん2011/07/10(日) 14:04:42.41
羅列できないから無理だよ
416 :デフォルトの名無しさん2011/07/10(日) 14:07:17.89
>>415
そうなんですか
ありがとうございました
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で飛ばすというのも有効なんですが?(思い浮かんだだけで実際には組んでいません)

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

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最速のメモリベースとの比較。普通のファイルにしたら遙かに遅い。
435 :デフォルトの名無しさん2011/07/10(日) 19:21:39.63
>>430
いやファイル版との比較もあるよ
15倍程度になってる
436 :デフォルトの名無しさん2011/07/10(日) 19:23:56.94
>>430
STLのlistと比較するならオンメモリで妥当じゃないのか?
426 :デフォルトの名無しさん2011/07/10(日) 18:04:09.27
遅くても手軽に済ませたいならSqliteつかえ。
データ格納方法とかを自作する必要がなくなる。
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++が扱えるならなるべく工夫しろって事。
437 :デフォルトの名無しさん2011/07/10(日) 20:10:09.43
SQLiteのオンメモリは、使い終わった後で保存できるの?
保存時に別データベースをオープンして全データ流し込むの?
438 :デフォルトの名無しさん2011/07/10(日) 21:27:17.87
ゲームのセーブ機能をつくろうとしているのですが
設計をどうしたら良いか悩んでいます

class ISprite
{
440 :デフォルトの名無しさん2011/07/10(日) 21:37:15.57
>>438
【初心者】スレを立てる前にココで質問を【Part23】
http://hibari.2ch.net/test/read.cgi/gamedev/1309450150/
441 :4382011/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とかで管理する
とかの方法もあると思うな
444 :デフォルトの名無しさん2011/07/10(日) 22:12:41.94
どんなデータを記録したいのかで千差万別。
シムシティと、RPGでは違うだろ。
445 :4382011/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が大文字になっているのは何か理由があるのでしょうか?
448 :デフォルトの名無しさん2011/07/11(月) 13:35:45.01
>>446
なにか意味を考えるとしたら
ユーザー定義型を区別するため
C++ や Javaでのクラスでの一般的なつけ方を使った
とかかなぁ
447 :デフォルトの名無しさん2011/07/11(月) 13:26:26.99
クラス名は大文字で始めるという、そのページのルールなんだろ。
449 :デフォルトの名無しさん2011/07/11(月) 21:32:27.70
mapを有効利用できるケースを教えてくれませんか?
ペア型(キー,値1)の紐付けじゃ、1次元配列でよくね?と思ってしまうわけで

キー,値1,値2,値3,みたいな運用ができれば重宝したのに
451 :デフォルトの名無しさん2011/07/11(月) 21:41:02.96
>>449
むしろそういう使い方の方が一般だと思うよ
453 :デフォルトの名無しさん2011/07/11(月) 21:47:09.49
>>449
vectorを突っ込めば済むだろ
450 :デフォルトの名無しさん2011/07/11(月) 21:36:34.03
struct value { val1 v1; val2 v2; val3 v3; } ;
map<key, value> m;


452 :4492011/07/11(月) 21:44:39.50
>>450,451
言われてみれば
2番目を配列にすればよかっただけだった。

どもです
454 :デフォルトの名無しさん2011/07/11(月) 22:11:18.81
超初心者だけど
mapって総舐めでアクセスするんだっけ

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

hoge datalist[1000];

データ数が変更されないリスト表的なデータなら
構造体の配列要素をキーにしたほうが扱いやすくね?
456 :デフォルトの名無しさん2011/07/11(月) 22:42:28.63
>>454
だいたいは二分木使って実装されてるでしょ
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)で調べると値が異なるというのがわかりません。配列の大きさも同じなのに
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)
{
}

で正常に動作しました
460 :デフォルトの名無しさん2011/07/12(火) 20:06:30.48
a[0]="00"
b[1]="00"

はスタック上の違う場所に"00"って文字をつくって、そのアドレスを突っ込んでるから。
アドレスが違うので違う。
464 :デフォルトの名無しさん2011/07/12(火) 20:22:48.61
それ以前の問題だろ
教科書やり直してこい
この馬鹿にちゃんと指摘してやれよ
説明面倒だから俺はやらんが


466 :デフォルトの名無しさん2011/07/12(火) 20:58:05.81
if(a[0][0] == b[1][0])でご期待通りに動く
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
馬鹿なの?死ぬの?
472 :デフォルトの名無しさん2011/07/12(火) 21:36:38.09
>>469
の場合\0の後にももう1個\0つくの?
471 :デフォルトの名無しさん2011/07/12(火) 21:33:28.13
いやー。ネタなのかマジなのか本気で悩むわw
ネタだとしても意味わかんないし(汗
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++ です。
478 :デフォルトの名無しさん2011/07/12(火) 22:25:28.13
>>475
二行目の4がbに入るループの終わりではまだcinに改行が残ってる
その次のループでcinはまだ終端ではないのでif文はスルーされる
cinは失敗するが改行は読み込むというか読み飛ばす
a, bには前のループの値のままなので3 4が出力される
cinはもう終端なので次の周のifでbreakされる
480 :デフォルトの名無しさん2011/07/12(火) 22:27:13.63
>>478
ありがとうございます、理解しました
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でいけるはず。
479 :デフォルトの名無しさん2011/07/12(火) 22:25:47.20
>>476
>>477
おぉ、いけました。ありがとうございます!
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
頭大丈夫?
489 :デフォルトの名無しさん2011/07/13(水) 05:33:51.31
>>485
お前がアホ
493 :デフォルトの名無しさん2011/07/13(水) 08:58:09.89
アマというか趣味グラマはそうでもないぞ 好きでやってるからな
6割くらいだろう
495 :デフォルトの名無しさん2011/07/13(水) 11:31:24.46
日本の職業プログラマ60万人のうち6,7割は、ちょっとできるレベルの
アマプログラマに負けてるレベル。
496 :デフォルトの名無しさん2011/07/13(水) 11:34:59.68
重要な産業なのに待遇最悪で教育もてんでダメとか日本終わってるよな
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
実際にはもう少し横に項目数があり、数字で別データもあるという感じでお願いします
502 : 忍法帖【Lv=24,xxxPT】 2011/07/13(水) 21:54:15.40
>>498
その巫山戯た仕様をぶち壊せ。
504 :デフォルトの名無しさん2011/07/13(水) 22:28:45.50
>その巫山戯た
どういう文字列を変換したのか予想がつかないw

みざんぎ?
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すればいいんでしょ?
513 : 忍法帖【Lv=24,xxxPT】 2011/07/14(木) 00:54:04.90
>>510
map1[1] = Numdata;
map2[1] = vector<int>(Numdata, Numdata + 10);
511 :デフォルトの名無しさん2011/07/14(木) 00:35:43.16
std::pairって知ってる?
512 :デフォルトの名無しさん2011/07/14(木) 00:47:58.43
>>511
mapの使い方が理解できました

514 :デフォルトの名無しさん2011/07/14(木) 04:12:49.14
mapで配列や構造体を使うならコピーコンストラクタの書き方と参照カウンターを覚えようぜ。
516 :デフォルトの名無しさん2011/07/14(木) 13:31:27.39
二乗三乗の指数計算をPOW(だっけ?)を使わず
int型のまま処理する方法ってありませんか?

for(i=0;i<4;i++)
{
5x10^i
}
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
再帰を使って自作の指数関数ってわけですね

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


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

535 :デフォルトの名無しさん2011/07/14(木) 21:07:18.19
すみません、なんかプラスが消えました
「Cで出来て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
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); // こっちでも呼べる


もちろん使った事は無いが
544 :デフォルトの名無しさん2011/07/15(金) 15:56:23.06
mapもlistも使ったことない
全て構造体配列で対応している

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

if(商品[0]==参照リスト[i])
{
}
find?イラネ
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)
この差はサイズが大きいほど顕著に現れる
550 :デフォルトの名無しさん2011/07/15(金) 19:35:47.48
>>548
言われてみりゃ〜

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

10個程度ならまだしも、1000、10000と数が増えると
何度もサーチする必要が出てくる構造となったら無視できなくなるな
552 :デフォルトの名無しさん2011/07/15(金) 20:17:00.11
>>550
そもそも、仮に効率が同じだとしてもループの中身を見ないと検索していることが分からないだろ。find()なら間違いようがない。strcpy()なんかを使うのも同じことだ。
549 :デフォルトの名無しさん2011/07/15(金) 18:49:47.01
privateな関数もなんらかの方法で関数ポインタにアドレスを教えてやれば
別クラスから実行できちゃいますか?
551 :デフォルトの名無しさん2011/07/15(金) 20:14:41.30
>>549
std::function<void ()> func = std::bind(&test::プライベートなメンバ関数名, インスタンスへのポインタ);
554 :デフォルトの名無しさん2011/07/15(金) 20:28:06.43
>>551
bindとか使うんですね。。さらっと流してたけどいろいろ出来そう
ありがとうございました
553 :デフォルトの名無しさん2011/07/15(金) 20:27:20.24
超初心者時代

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

検索データ数が50未満の初心者のお勉強という低次元の話だけど
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; こんなのも全部未定義でしょうか?
557 :デフォルトの名無しさん2011/07/16(土) 11:05:38.65
a[i++] = (j = i % 2) ? 0 : 1;
って書くと大丈夫じゃないような気も。いや気のせいか?
559 :デフォルトの名無しさん2011/07/16(土) 11:27:55.74
>>557,558
馬鹿は死ね
558 :デフォルトの名無しさん2011/07/16(土) 11:17:55.21
要は左辺で++したりする変数が、右辺に出てきちゃったら未定義だったかと。
たとえカッコでどうしようとも。
561 :デフォルトの名無しさん2011/07/16(土) 11:52:57.83
×◯◯×じゃないのか?
563 :デフォルトの名無しさん2011/07/16(土) 11:58:27.51
>>561
◯◯××じゃないのか?
564 :デフォルトの名無しさん2011/07/16(土) 12:00:47.45
>>563
◯×◯×じゃないのか?
573 :デフォルトの名無しさん2011/07/16(土) 15:16:11.23
>>563
もう、いいから引っ込んでろ。痛々しすぎる。
565 :デフォルトの名無しさん2011/07/16(土) 12:05:08.58
××××じゃないのか?
×××◯じゃないのか?
××◯×じゃないのか?
××◯◯じゃないのか?
×◯××じゃないのか?
×◯×◯じゃないのか?
×◯◯×じゃないのか?
×◯◯◯じゃないのか?
◯×××じゃないのか?
◯××◯じゃないのか?
◯×◯×じゃないのか?
◯×◯◯じゃないのか?
◯◯××じゃないのか?
◯◯×◯じゃないのか?
◯◯◯×じゃないのか?
◯◯◯◯じゃないのか?
567 :5632011/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++);
こうするとやはり未定義か。括弧で評価順は変わらない?
570 :5632011/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
頭大丈夫か?
572 :5632011/07/16(土) 15:12:26.70
そうか、訂正して修正
>>568 は int j = i, a[j] = ++i; の可能性もあると。
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);
これだけでいい
577 :5752011/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";
でもいける
580 :5752011/07/17(日) 12:17:05.08
>>578-579
なるほど!ありがとうございます!
STLの使い方わかってませんでした。。
579 :デフォルトの名無しさん2011/07/17(日) 12:09:16.15
STLはオブジェクトの複製を格納する
(*it)は複製されたオブジェクトへの参照を返す
もとのオブジェクトとは関係ない
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++はコピーの概念で出来てる」ってどこかで聞いた事があったので、
このあたりが関係してるのかなと思いました。
584 :デフォルトの名無しさん2011/07/17(日) 12:50:31.34
慇懃無礼なQの匂いがする
585 : ◆QZaw55cn4c 2011/07/17(日) 14:28:02.78
>>584
へえ、こんなスレもあるんですね。
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はちょっとヤバさを感じている
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)
{
 処理
}
592 :デフォルトの名無しさん2011/07/19(火) 03:05:18.94
VC++2010ならすでにautoでいけるよ
何気にautoの使い方で一番有効だよな
いろんなコンテナを舐めるループをマクロで一括定義できる
595 :デフォルトの名無しさん2011/07/19(火) 11:46:26.56
BOOST_FOREACHは酷いコード吐くから使いたくないわ
596 :デフォルトの名無しさん2011/07/19(火) 12:07:03.88
>>595
もうすでに酷いコード書いてるから
大丈夫だよ
601 :デフォルトの名無しさん2011/07/21(木) 00:26:09.10
C#とJavaしかやったことのない日曜プログラマで
これからC++をやってみようと思うんだが、Cやっといたほうが理解が進むのかな?
オブジェクト指向から学んだからいまいち手を出しにくいのだけれど…
602 :デフォルトの名無しさん2011/07/21(木) 00:31:19.91
>>601
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の実装みて
他言語のあれはこうやって動いてるのかとやる
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#もまた似ている。
609 :デフォルトの名無しさん2011/07/21(木) 12:20:30.50
まずはCASL IIを学べ
Z80や8086でもいい
やっておくと理解度が全然違うぞ
610 :デフォルトの名無しさん2011/07/21(木) 12:55:02.88
すみません。
CreateWindow関数で作ったウィンドウに、ファイルをドラッグ&ドロップしてそのフルパスを取得したいのですが、
どう実現すれば良いのでしょうか? ググるべきワードか関数名を教えて下さると幸いです;
612 :デフォルトの名無しさん2011/07/21(木) 12:58:42.79
>>610
「winapi ドラッグアンドドロップ」でググると一番上に出てくるよ。
613 :6102011/07/21(木) 13:11:23.78
>>611 >>612
早速具体的な情報を見る事ができました。ありがとうございますっ
611 :デフォルトの名無しさん2011/07/21(木) 12:57:13.70
WM_DROPFILES
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)は使えないぞ
ちゃんと計算して残りのメモリのサイズを渡さないと
619 :6142011/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()に使える領域サイズを教示しているのかも解っていない悪寒。
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]));
  }
}
626 :デフォルトの名無しさん2011/07/23(土) 16:14:58.16
>>622
stringのコンストラクタ見たらなんとでもなるんじゃないのか
629 :デフォルトの名無しさん2011/07/23(土) 16:23:55.18
>>622
>「KEY=VALUE」みたいな行が複数あるテキストファイル
それiniファイルの書式だから
所謂MBCSの扱いでいいならboostかwindowsならapi使えば?
win32apiなら予めUnicodeにしておけばそのままwstringに入れられるし
636 :デフォルトの名無しさん2011/07/23(土) 20:41:11.93
>>626
詳しく教えてもらえますか?

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

個人的には string の特定部分だけをアドレスで持つ range みたいなものがあると思っていたんですが・・・
639 :デフォルトの名無しさん2011/07/23(土) 21:11:30.22
>>636
substrでダメな理由は?
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, なんか整数変数, , なんか整数変数)));
ってすりゃいーじゃん
644 :6392011/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と一緒
651 :デフォルトの名無しさん2011/07/24(日) 02:41:17.18
>>626
stringがどうこうより、mapがどうこうだからなぁ
自前でコンテナもどき作るしかないだろう

あるいは開始位置・終了位置を保持したクラスをmapしてもダメかね?
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がマジックナンバーみたいで気に入らなかったんじゃないの
627 :デフォルトの名無しさん2011/07/23(土) 16:16:06.12
>>624
while(1)だと毎回真偽値判定されてループするが
for(;;)だと空白→特殊処理としてループすることになるんでコストがお得とか何とか
そしてこれはいにしえの話らしい
628 :デフォルトの名無しさん2011/07/23(土) 16:19:44.55
>>627
いしにえだと断って言われたんなら
そういう話で解決してるんじゃん

何十年前の話だよって感じだが
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はその項目に飛ぶ)
642 :デフォルトの名無しさん2011/07/23(土) 21:28:57.49
>>640
質問者はswitchはジャンプテーブル使った間接ジャンプにコンパイルされると
思ってたから、>>630のような質問をした。
実際はそんなコードにはならないという事がわかれば、どっちで書いても実際
は大差がないので読みやすい方で書けばいいという結論が得られる。
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はジャンプテーブル使ったジャンプにはならない。
638 :デフォルトの名無しさん2011/07/23(土) 20:54:04.93
>>634
こちらの意図を読み取って、どうでもいいところをギャーギャー騒ぐ典型的な駄プログラマーと違って
ピンポイントな回答をありがとうございます
640 :デフォルトの名無しさん2011/07/23(土) 21:20:32.92
>>638
>>634でswitchがだめな理由がよくわからないんだけど。
最適化のためにわざわざswitch書くのに最適化されてねーじゃんって意味?
635 :デフォルトの名無しさん2011/07/23(土) 20:17:08.54
break;抜けるなら変わらないけど
そうじゃなかったりしたらぜんぜん違ってくるよ
あと{}つけないとスコープも違っている
641 :デフォルトの名無しさん2011/07/23(土) 21:28:08.64
にわかクン「switchってだめと思い込んでいるけど本当にだめなの?」
その他大勢「内部処理はほぼ同じ」
にわかクン「おなじなのか」

                                       おわり

って意味じゃね?
652 :デフォルトの名無しさん2011/07/24(日) 15:24:29.40
>>641
にわかクン「switchって良いと思い込んでいるけど本当に良いの?」

ってんなら文章として通じるんだけどね。
654 :デフォルトの名無しさん2011/07/24(日) 16:05:24.66
>>652
へ?
665 :デフォルトの名無しさん2011/07/25(月) 13:20:35.95
>>654
あるいは、最後が
にわかクン「別にだめじゃないのか」
でもおk
645 :デフォルトの名無しさん2011/07/23(土) 21:40:42.15
変数をカウントアップしながらループするのは、whileでもforでも書けるけど
for()のほうがその意図が明確になる。
一個の変数を参照して分岐する処理ならswitchがいいな。
649 :デフォルトの名無しさん2011/07/23(土) 21:58:52.44
というか文字列をある
>文字列のRangeだけ渡して生成する
のがsubstrじゃなかったっけ?
(開始位置も渡すけど)
650 :デフォルトの名無しさん2011/07/23(土) 22:00:07.70
あ、たしかにこのやり方ならコピーした方がいいね。入力がストリームだしコンテナに入れてるし。
結局ファイルの中身全部読み込んで、複製せずに終端記号だけ付け替えて使いまわせるよう分割するってのをC++でしたかった。
コンテナに入れたりini形式がどうこうなりはその次で。

>> 646
サンクス

>> 649
substrは中でコピーしちゃってるじゃん
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++標準関数が使える環境で
これをもっとエレガントなやり方を教えてくださいませんでしょうか?
まことに勝手ですがふしてお願い申し上げます。
659 :デフォルトの名無しさん2011/07/24(日) 19:47:23.96
やっぱそうなんですね。
ありがとうございます。
これで堂々とこの汚いやり方で行けます
660 :デフォルトの名無しさん2011/07/24(日) 22:05:48.90
C++でクロスプラットフォームなMIDIライブラリをRtMidi以外で知りませんか?
664 :デフォルトの名無しさん2011/07/25(月) 09:54:50.35
>>660
sdlとか?
672 :6602011/07/25(月) 22:40:37.69
>>664
レスありがとうございます。
MIDIってのはMIDIファイルのことじゃなくて
MIDI I/Oってことでした。バーチャルポート作ってそっからMIDI信号出力とかがやりたかったんです。
明記してなくてすみません。
まさにRtMidiの様な機能があればいいのですが、
RtMidiはMac OS Xでユニバーサルビルドができなくて...
661 :872011/07/25(月) 00:04:51.15
1バイト文字の配列から、全ての文字の出現回数をカウントしたいのですが(文字のヒストグラム)
どのコンテナを使ったら幸せになれますか?
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がなにを意味しているかコンパイラさんが分からないだろ
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
ある関数で構造体配列を宣言して、アドレス渡しで他の関数に渡した場合、アドレスを受けとった側の関数で初期化は可能でしょうか?
680 :デフォルトの名無しさん2011/07/26(火) 06:11:45.30
ありがとうございます。
どのように記述すれば良いでしょうか?

下記の様な書き方でしょうか?
memset(test,0,sizeof(*test));
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は同じ物として扱われてしまう?
691 :デフォルトの名無しさん2011/07/27(水) 09:59:00.94
.cに書いたグローバル変数は、staticをつけるとファイルごとのスコープに
なるけど、なんかそこらへんの話と混同してそう。
>>688はローカル変数だし、.hだし。
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
697 :デフォルトの名無しさん2011/07/28(木) 14:51:12.22
メンバ関数内で宣言した静的ローカル変数って、
クラスのインスタンスをデストラクタで解体した時に消えてくれます?
700 :デフォルトの名無しさん2011/07/28(木) 15:05:29.60
すんません、シングルトンクラスです
回答ありがとうございます

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006