- 1 名前:デフォルトの名無しさん [2007/06/03(日) 22:33:55 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です。 【前スレ】 【初心者歓迎】C/C++室 Ver.37【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1178432985/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 855 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 04:31:38 ]
- typedef vector<int> V;
typedef V::iterator I; typedef vector<V> VV; VV vv; for_each( vv.begin(), vv.end(), tr1::bind( &fill<I,int>, tr1::bind(static_cast<I (V::*)()>(&V::begin), tr1::placeholders::_1), tr1::bind(static_cast<I (V::*)()>(&V::end), tr1::placeholders::_1), 0)); g++ 4.1.2です。 2次配列の初期化をalgorithmの練習でやってみようと思っていろいろ試行錯誤してみたのですが、 こんな悲しいコードになってしまいます。 static_castは省略できても良さそうなものですが、これはg++特有の問題でしょうか? (省略できたとしても普通にループ書いたほうがわかりやすいけど)
- 856 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 08:20:41 ]
- >>852
ふと思ったんだが、公開されてないデータ構造ってどうやってわかるの? やっぱバイナリエディタで開くと、大体わかっちゃうものなの?
- 857 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:06:54 ]
- >>856
バイナリデータの解析の基本は 「ちょっといじって何が変わったか調べる」。
- 858 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:10:48 ]
- 夏カシス昔よくやった
- 859 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:00:27 ]
- >>855
g++ じゃなくても static_cast は外せないだろうね。 bind() の第1引数にはほとんど何でも入るから、コンパイラの知ってる情報だけでは オーバーロードされた &V::begin のうち適切なものを選べない。
- 860 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:55:40 ]
- >>851
WORDは色々バージョンも多いから そんなめんどくさい事せずに、POIを使った方がいいと思われ。 ただ無駄にJavaのコード呼び出す必要があるけどな。
- 861 名前:デフォルトの名無しさん [2007/06/22(金) 13:26:29 ]
- 0〜9の数字をランダムに発生させて
数字が被らないように どのような順番で数字が来たか表示させるという処理をしたいのですが このようなプログラムを作るにはどうすればいいのでしょうか 乱数生成時に数字が被りすぎて無限ループに近いじょうたいになってしまいます
- 862 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:30:14 ]
- 0〜9 の数字を入れた配列を作ってシャッフルするのが一般的。
C++ なら random_shuffle って関数テンプレートがあるから、それ使う。 C なら自前で作るべし。 アルゴリズム悪いと確率が偏るから、 ランダムシャッフルで検索してアルゴリズム調べてちょ。
- 863 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:30:39 ]
- >>861
絶対被っちゃいけないなら、それは0-9のランダムではなくて0-9のうち前回の数字を取り除いたランダムじゃないか。
- 864 名前:861 [2007/06/22(金) 13:35:54 ]
- ,, ,,,
゙'lliiiiiiiiiiiiilllllllllllllllll|||li,, l||||l ゙゙゙゙゙ 、,,,,,,,ii!!"゙゙゙゙゙ 、,,,,,, 、,,,, |||| ,l||||" ゙゙'llli,, ゙l||! ,,l|||゙ ill,,,,,,,,,,,,,,,,,,,,,,,,,,,iiilllll,,, ||| ,,l|||! ゙゙゙゙゙ ,,,l||" ゙゙'゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙ || ,il|l゙゙ ,,rlll" ,,,, ,,ill"゙ ,,,ril"゙ il||||l
- 865 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:40:26 ]
- 力抜けよ
- 866 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:56:17 ]
- そう、もっと・・・力を抜いてごらん・・・。
- 867 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:59:44 ]
- for (;;) { >>865 >>867 >>866 }
- 868 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 14:02:50 ]
- 5→6→4じゃね?
- 869 名前:デフォルトの名無しさん [2007/06/22(金) 14:27:56 ]
- C++では変数の宣言をどこにでも置けると聞いたのですが、
goto文で変数の宣言を飛ばすことはできないのですか? 以下の文をコンパイルできません。 int main() { goto end; int a = 100; end: return 0; }
- 870 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 14:38:20 ]
- >>869
何が目的なのかさっぱり解らんが、 「宣言」は「実行」されないんだから 飛ばすも何もない。
- 871 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:43:43 ]
- つまり、gotoで分岐する範囲では宣言できないということだ。
- 872 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:46:05 ]
- switch - case で、caseで宣言できないのと同じだな
- 873 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 16:18:11 ]
- 最初に格納する数値を入力して、
以下のように文字などを無視してその個数分だけ整数値を格納する というプログラムを作りたいのですが、これって可能でしょうか? fgetsとstrtolを使うといけそうな気がするのですが 頑張ったものの自分ではどうにもならない状況ですorz 【実行画面】 個数を入力したください>>5 5a11bbb7 88yew99 数値1:5 数値2:11 数値3:7 数値4:88 数値5:99
- 874 名前:デフォルトの名無しさん [2007/06/22(金) 16:53:19 ]
- いままでCでは数値を文字列にするときは
sprintf(str,"%d",num);のようにやってたのですが、 C++でstd::stringとsize_type size()等、STLを使う場合はどのように変換すればいいのでしょうか? std::string str1 = "ああああ"; std::string str2 = "長さ" + str1.size() + "です"; みたいに使いたいのですが、これはエラーがでます。
- 875 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:01:09 ]
- boost::lexical_castなどはどうだろう
- 876 名前:874 [2007/06/22(金) 17:10:29 ]
- >>875
おお、すげー便利なもんあるんですね。ありがとうございます。早速使ってみます。
- 877 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:20:04 ]
- >>873
一文字ずつアスキーコードで比較して行けばいいのでは?
- 878 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:25:46 ]
- >>873
宿題なら宿題スレ行きを薦めるが、とりあえずこんな感じで出来る。 #include <stdio.h> #include <ctype.h> int main(void) { int i, c, nc, *nv; printf("個数を入力してください>>"); if (scanf("%d", &nc) != 1 || nc <= 0) return 1; nv = malloc(nc * sizeof(int)); for (i = 0; i < nc && (c = getchar()) != EOF; ) { if (isdigit(c)) { ungetc(c, stdin); scanf("%d", &nv[i++]); } } nc = i; for (i = 0; i < nc; i++) printf("数値%d:%d\n", i+1, nv[i]); free(nv); return 0; }
- 879 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:41:32 ]
- >>877
このスレを最初から読んでいたらscanf処理のことが書いてあって、 代わりにfgets+strtolということが書いてあったので この処理を弄くって上に書いたような処理がOKになったら 使いやすくなりそうだと思ったのですが やはりこの仕様にするとそれが早いかもですね…。 >>878 宿題では無くちょっとこのスレを読んでいて気になったので考えていました。 しかし書いてくださりありがとうございます。 いくつか知らない関数があるのでググって見てみます。 ちなみにfgetsとstrtolで12a23から12と23を取りたかったら strtol(str,&error[i],0); strtol(&error[i]+1,&error[i+1],0); こんな感じでずらしていく感じにするのでしょうか?
- 880 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:51:22 ]
- >>879
こんなかんじ。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(void) { char buff[0x1000], *p, *q; unsigned char c; while (fgets(buff, sizeof buff, stdin)) { for (p = buff; c = *p++; ) { if (isdigit(c)) { printf("%ld\n", strtol(p-1, &q, 10)); p = q; } } } return 0; }
- 881 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 18:25:06 ]
- >>880
おぉ、激しく感謝です! しかもコードが短くて使いやすくて良いですね! 今日なんだかんだで5、6時間ほど考えていたので 教えてくださりかなりガチで嬉しいです>< 重ね重ねですが本当にありがとうございます!
- 882 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 19:30:17 ]
- 突然すみません。質問させていただきます
自分は最近Cを始めたばかりの初心者で、初心者向けの本を参考にしてプログラムしています。 そして、その本を読み終えてさあがんばってみようと、ためしにオープンソースのものをDLして、ソースコードを見てみました すると、いくつもファイルがあり、ひとつではありませんでした。 教本を見ても複数ファイルを同時に扱ってプログラムをする、なんてやりかたはどこにも書いていなく、戸惑っています どうやって複数のソースコードをひとつのプログラムとしてまとめられるのでしょうか? 分がわかりにくかったらすみません。教えていただけたら幸いです。
- 883 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 19:35:30 ]
- 分割コンパイルで検索
- 884 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 19:43:54 ]
- 解凍したディレクトリで、./configure か、counfigure.bat したあと、make か nmake
- 885 名前:たろう [2007/06/22(金) 21:41:10 ]
- 曖昧さについて質問があります。
現在、ある処理をできるだけ小さいプログラムで記述する競争をしてまして、 以下のような記述か可能かどうか教えてください。 ●質問1 ----- int a = 0; int b[] = {a++, a++, a++}; ----- と記述した場合、 b = {0, 1, 2} となるのでしょうか? それともコンパイラ依存でしょうか? コンマ演算子は左から行う結合ルールですが、 この場合は演算子じゃないので、 明確なルールはなく、コンパイラ依存でしょうか? ●質問2 func1 があるクラスのポインターを返す関数であるとして、 ----- int a = 0; func1(a++)->func2(a++); ----- と記述した場合、 func1(0)->func2(1) となるのでしょうか? それともコンパイラ依存でしょうか? func1(0) を実行してからでないと、func2 が決定しないので、 なんとなくその中の引数の評価が後のような気がしますが。
- 886 名前:じろう [2007/06/22(金) 22:12:25 ]
- やあ、たろう
この勝負は俺がもらった 約束通りお婆ちゃんの貞操は頂いて逝くぜ
- 887 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:20:55 ]
- int a = 0;
int b[] = {a++, a++, a++}; ----- int b[] = {0, 1, 2};の方がよほど短いわけだが。 ----- int a = 0; func1(a++)->func2(a++); ----- 同様にfunc1(0)->func2(1);ではいけないのだろうか。 まぁ、一つの式の中にa++が二つある場合の評価順序は不定と言うことで。
- 888 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:27:23 ]
- >885
プログラムを短くするノウハウについては ↓のスレが勉強になるかもよ 七行プログラミング part5 ttp://pc11.2ch.net/test/read.cgi/tech/1142467359/
- 889 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:38:11 ]
- >>880
sizeof(buff)の形ならよく見るのですが、sizeof buffのように括弧のないものって何でしょうか?
- 890 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:41:30 ]
- >>889
別にカッコつけなくても生きていけるんです
- 891 名前:デフォルトの名無しさん [2007/06/22(金) 23:46:17 ]
- sizeofというのは「関数」じゃない。
だから、sizeof(buf)のbufは、関数の「引数」じゃない。 関数じゃないから、括弧は「関数呼び出し演算子」ではない。 sizeofは、演算子の一つ、sizeof演算子です。だから、括弧は不要。 「1+1」を「 (1)+(1) 」とは書かないでしょ?これと一緒。
- 892 名前:889 mailto:sage [2007/06/23(土) 00:11:33 ]
- ありがとうございます。付けなくてもいいんですね。
なのに()付きのサンプルコードが多いのは何故なんでしょうか?
- 893 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 00:15:46 ]
- >>892
型のサイズを知るには、sizeof(int)のように括弧が必要。 それに倣って、括弧をつける人が多数。
- 894 名前:889 mailto:sage [2007/06/23(土) 00:19:49 ]
- なるほど、そういうことだったんですね。
ありがとうございました。
- 895 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 00:22:27 ]
- 括弧つけても優先順位に全く影響与えないしな。
無駄だし勘違いする人も出るからと嫌う人もいるし、 括弧を付けた方が統一性が出ると付ける人もいる。 そして、よく知らないけど括弧付けないといけないと勘違いしてる人もいる。
- 896 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 00:56:10 ]
- 何でtypeidはカッコ必須なの?
- 897 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 00:58:17 ]
- typeidの場合はsizeofと違って対象が型だろうが値だろうが括弧が必要。
だから個人的には、sizeofも常に括弧を書いたほうが何となく対象性がある気がする。
- 898 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 01:07:29 ]
- >887
>まぁ、一つの式の中にa++が二つある場合の評価順序は不定と言うことで。 不定じゃなくて未定義でしょ。 鼻から悪魔がでてくるじょ
- 899 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 06:59:03 ]
- いや不定だろ
- 900 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 07:11:10 ]
- JISX3010 6.5式 (70)によれば、
「この段落の規定によると(略)a[i++]=i;は、未定義の式文である」
- 901 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 13:33:55 ]
- せいぜい言葉遊び。
「未定義」だから、コンパイラにより「不定」になるんだろ。
- 902 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 14:02:30 ]
- >>901
www.kouno.jp/home/c_faq/c11.html#33
- 903 名前:デフォルトの名無しさん [2007/06/23(土) 14:44:39 ]
- C++とはちょっと違うのですが、適当なスレが見つからなかったので、すみませんが質問させてください。
VC++6.0のマクロ機能を使って、エディタ上で選択している文字列を 外部プログラムに渡すマクロを作りたいのですが、このマクロの仕様というか そもそもこいつが何者なのかがさっぱりわかりません。 マクロのサンプルを見て出てきた文字列を片っ端からぐぐりつつやってみたのですが 外部プログラムの実行だけがどうしてもできません。 どなたかこいつが何者なのか、どうすれば外部プログラムを実行できるのか教えてください。
- 904 名前:855 mailto:sage [2007/06/23(土) 21:13:36 ]
- >>859
遅くなってすみません。キャスト外せませんか…ありがとう。 俺もそのような意味の話をネットのどこかで読んでキャストをつけたんですが、 でもV::beginってオーバーロードされてないですよね?何か勘違いしてるんでしょうか。
- 905 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 21:15:34 ]
- >>904
const の有無で2つある。
- 906 名前:855 mailto:sage [2007/06/23(土) 23:25:01 ]
- >>905
あ、ありがと。気づきませんでした。 &V::beginは関数ポインタの集合で、これをキャストなり代入なりする時に 型に合う関数ポインタが適当に選ばれるような感じでしょうか。 V::iterator (V::*b)() = &V::begin; V::const_iterator (V::*cb)() const = &V::begin; V::beginは前者、(const V)::beginは後者を選ぶようなルールがあれば話は早いと思うけど、残念。
- 907 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:46:52 ]
- 文字列中の " を \" に変える関数ってコレで良いんですかね?
std::basic_string<TCHAR>::iterator dquoteToESC(std::basic_string<TCHAR>& str) { typedef std::basic_string<TCHAR>::iterator iter; iter i = str.begin(); while ( i != str.end() ) { i = std::find(i, str.end(), _T('\"')); if ( i == str.end() ) break; i = str.insert(i, _T('\\')) +2; } return str.begin(); }
- 908 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 00:03:12 ]
- どうでもいいが関数名はEscDQuoteのほうがいいんじゃないの?
- 909 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 05:33:08 ]
- 今では vector のメモリ上での連続性は保証されてますけど、
昔は少なくとも規格上では保証されていませんでした。 で、実際のところ、メモリ上での連続性がない場合のある処理系って実在したんでしょうか? 実在しなければ、メモリ上での連続性を仮定したプログラムは 過去の処理系との互換性があるということで安心できるのですが。
- 910 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 07:15:16 ]
- 俺は聞いたことがない
普通に作れば連続するから実質的に実装の後追いで連続性の保障が与えられたのであって、 連続していなかった処理系なんてないと思って差し支えないはず
- 911 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 07:17:54 ]
- そうですか。安心しました。
d。
- 912 名前:デフォルトの名無しさん [2007/06/24(日) 13:53:56 ]
- ifstreamへの書き込みについて質問させてください。
ifstream fin("test"); として、 char c; char s[100]; のとき、 (1) fin >> c; ===> 読み込みは一文字だけ。 (2) fin >> s; ===> 読み込みは一行全部。配列sのサイズを越えても。 という理解でいいでしょうか。 (実験したらそうなりました。)
- 913 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 14:04:56 ]
- 普通は、fin.read(s, 100 )とかstd::getline( fin, str )とか使うけどね。
- 914 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 14:14:46 ]
- >>912
配列の先頭アドレスしか受け取っていない関数は、配列のサイズについて関知しない。
- 915 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 14:31:41 ]
- >.912
(1)についてはそのとおり (2)についてはちがう。 空白文字(スペース、タブ、改行等)を読み飛ばし、 次の空白文字が来るまでバッファを超過しようがsに詰め込もうとする。 scanfの%sと同じと思っておけばよい。
- 916 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 14:35:50 ]
- まあ、折角 istream 使ってるんなら、
char じゃなくて string 使った方が安全でいいね。
- 917 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 14:52:06 ]
- そもそも、なんでifstreamへの書き込みについての質問なのに読み込む話ばかりなんだ?
- 918 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 14:54:29 ]
- >>917
2行目以後を読めば、1行目の「書き込み」はただのtypoだと分かるから。
- 919 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 15:22:55 ]
- >>910
設計時点で C 配列の代用という用途は考えられていて、 規格への明記が漏れていただけだと思われ。 ↓でも現状の実装についての考察なんて問題にならなかったみたいだし。 www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#69
- 920 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 15:59:49 ]
- >>919
なるほど。確かに。 ただ、仕様上 one-past-the-end の問題は無い、 と言ってる点がいまいち分からんのですが。 5.7 para 5-7 (配列では one-past-the-end のアドレスが有効であることを保証) あたりとは矛盾しないのですか?
- 921 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:17:52 ]
- >>920
!v.empty() な v について &v[0] + v.size() が有効なことは &v[0] + (v.size() - 1) が 有効なことと 5.7p4 の 「配列じゃないオブジェクトもポインタの加算においては長さ1の配列とみなす」 っていうルールから導き出せるから、特に vector について書くことは無い ってことじゃないかな? まぁ、そうだとしてもわかりにくいね。
- 922 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:26:54 ]
- なるほど・・・。確かに。
- 923 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:10:37 ]
- 自動配線ツールをCで書こうと思ってるんですけど。
アルゴリズムはmazeをベースで。 書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか? アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。 サンプルなどがあればと思って質問させていただきました。
- 924 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:28:14 ]
- これですか?
www5e.biglobe.ne.jp/~me-jin_k/
- 925 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:30:07 ]
- 早速ダウンロードしました
- 926 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:33:48 ]
- ないのならないで結構です。
- 927 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:24:12 ]
- >>923
半導体用の自動配置配線ツールなら、優秀なものが出来て売ることが出来れば 2本程度売れるだけで遊んで暮らせるでしょう そして、そんなものが作れるなら…
- 928 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:35:00 ]
- >>927
そうなんですか。 イメージしてるのはたとえばこここの配線プログラムみたいなものなんですけど。 ht_tp://www.icot.or.jp/ARCHIVE/Museum/IFS/abst/058-J.html プログラムを落としてみたんですけど、分からない言語(KL1?)で書かれている(?)ようで、 中身を開けませんでした。
- 929 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:36:55 ]
- 難しいようですね、お騒がせして申し訳ありませんでした。
- 930 名前:ちんこ [2007/06/24(日) 19:27:46 ]
- www.uploda.org/uporg872561.cc.html
g++です。 三目並べのゲームを作ります。 show_stateがばぐります。どこがおかしいか教えてください
- 931 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 19:34:07 ]
- こんなのコンパイルとおるんだな。
- 932 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 19:37:08 ]
- >>930
State::State(bool s[3][3]){ for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ a[i][j] = s[i][j]; } } } ちなみに、マスの状態は、「○」「×」「どちらもおかれていない」の3通りあるから、boolではだめかと。
- 933 名前:ちんこ [2007/06/24(日) 20:33:11 ]
- [akira@58x13x98x215 sanmoku]$ g++ test.cc
[akira@58x13x98x215 sanmoku]$ ./a.out 1 0 1 0 1 0 1 0 1 さんくるです。>>932では3通りを表現するのに一番適したデータ型はなんですか? 空 1 0 というつもりだったのですが。intだとメモリがでかくなる。 まぁ三目なら全検索してもうんこだけど。 幅検索型の三目並べゲームをclassを使って作るというのが目標です。 計画しているクラスは Player CPU State Queue(Stateを含みまくるキューのクラス) Board(mainのクラスです) とかです。オブジェクト指向的に考えて適切ですか? うまい人ならどういうクラスを考えるんでしょうか。
- 934 名前:ちんこ [2007/06/24(日) 20:35:34 ]
- これが出来たら9*9盤くらいで5目並べをしてみたいです。
最終目標は囲碁のソフトですがこれはやばそうなので、まずは五目並べとかでゲーム作りのノウハウを学びます。
- 935 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:38:40 ]
- >3通りを表現するのに一番適したデータ型はなんですか?
boost::triboolってのがある これはtrue, false, indeterminateの3値を表現できる これをtrue = 白, false = 黒, inderteminate = 何がおかれているかわからない = 色が不定 とでも使えばちょうど良いんじゃないかな
- 936 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:39:14 ]
- >>933
intでもメモリには大差なくね? ってより、intのほうが高速になる可能性を秘めていると思うが・・・ あくまでも可能性だけど
- 937 名前:ちんこ [2007/06/24(日) 20:53:33 ]
- >>935
不定か、なんか怪しいデータ型ですね。 >>936 intの方が高速になる理由は? intって4byteですよね、boolがダメならcharかなと思っています
- 938 名前:デフォルトの名無しさん [2007/06/24(日) 20:55:37 ]
- ちんこあほすぎでわろたw
- 939 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:58:59 ]
- ちょっとすれ違いですが、
eclipse + Java並のリファクタリングやコード補完、コード整形等の機能を備えたC/C++のIDEはありますか?
- 940 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:02:43 ]
- >>939
あります。スレ違いなので詳細は割愛。 >>937 サイズが大きいから遅いとは簡単にはいえません。 まずは真っ当に作り上げることが先決でしょう。
- 941 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:07:12 ]
- >>937
そのCPUがもっとも得意とするビット幅を、intに割り当ててるコンパイラが多い可能性がある。 って程度じゃない。intの処理速度≧charの処理速度になる可能性があると。 ほとんどintの処理速度=charの処理速度だと思うが。 実際型のビット幅が決まってないのって弊害にしかならん気がする。
- 942 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:12:39 ]
- typedef int TRIBOOLとでも定義しておいて
とりあえず組んでみたら? 出来てから速度とか使用メモリーを測定してそれから決めればいい
- 943 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:16:21 ]
- >>937
高速になる理由は>940-941のとおり。 charとintでの速度比較した場合、intが早くなることはあっても遅くなることはあまり無いと思う。 1億×1億のフィールドとかを考えるならそりゃcharのほうがメモリは節約できるだろう。 ただ、intだとメモリが危ういがcharならきっと大丈夫程度の問題ならば、ベタに 配列として持つより設計を見直すほうがいいと思われる。
- 944 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:20:22 ]
- メモリアクセスの遅延により、メモリの節約自体が速度に効くだろうから
やっぱり最終的に実測しないと決まらない。
- 945 名前:ちんこ [2007/06/24(日) 21:21:39 ]
- うお、その話ならどっかで聞いたことがあったような。
じゃあintにしてみます。 9路盤で5目並べする時用にプログラムをあらかじめ N // 盤の大きさ M // これだけ並べば勝ちだぜぃな数 として組んだ方がいいですかね? しかしどうやればいいかはさっぱりなんですがね。 何しろゆとりなもんでwww
- 946 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:25:46 ]
- >>945
とりあえず数字決め打ちでもintでもcharでもいいから作りあげろ 話はそれからだ
- 947 名前:ちんこ [2007/06/24(日) 21:27:00 ]
- まじ難しい。
- 948 名前:ちんこ [2007/06/24(日) 21:29:53 ]
- クラスの依存関係がイミフ
- 949 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:33:39 ]
- 日記帳にでも書いてろ
- 950 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:43:37 ]
- あきらめろ
- 951 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:45:30 ]
- >>937
メモリ気にするんなら2bit一組で使えばいい、速度気にするんならintでok ちなみにC++ではbool型のサイズは環境によって違う 普通はintかcharになってるようなのでメモリの節約にはならない でもな、実際にこんなの気にしなきゃいけない環境って最近は少ないから まず動くもの作ってそれから考えるほうがいいよ
- 952 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 21:58:34 ]
- >>945
ちなみに、見た目簡単そうな5目並べだが、 まともな思考エンジン作れたら結構な額で売れる 昔仕事でUIだけ作って5目並べの思考エンジン買ってきた奴組み込んだけど、 中身かなり複雑で読む気もしなかったわw
- 953 名前:ちんこ [2007/06/24(日) 21:58:57 ]
- Playerクラスとかいるか・・・?
でもないとオブジェクト指向っぽくないよなぁ・・
- 954 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 22:00:34 ]
- >>945
この辺参考にして頑張ってくれ www.h6.dion.ne.jp/~game296o/GameMain.html www002.upp.so-net.ne.jp/ys_oota/mdp/ 後はひたすら試行錯誤 考えて分からなければとりあえず書いたら最低限何が駄目か何が必要かとかわかってくるんじゃね?
- 955 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 22:05:01 ]
- >>953
お前には無理だ せいぜい無駄な時間を浪費するがよい
- 956 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 22:42:47 ]
- >>928
KL1 www.klic.org/software/klic/index.ja.html
- 957 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 23:48:42 ]
- くだらない質問だと思いますがお願いします。
STLのvectorに格納した要素を、配列に即変換する方法はないのでしょうか? Iteratorを使って地道にループさせて配列に設定する方法しか思いつきませんでした。
- 958 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 23:49:27 ]
- std::copy
- 959 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 00:06:23 ]
- >>958
どうもです。
- 960 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 00:09:28 ]
- &vector_instance[0]ではいかんのか?
- 961 名前:こんにちは mailto:こんにちは [2007/06/25(月) 03:30:00 ]
- こんにちは
- 962 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 04:45:34 ]
- 次期仕様のドラフトだと data 関数があるみたいだが、
今の所は &v[0] か &v.front() だな。
- 963 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 04:47:50 ]
- >>953
Player インタフェースクラスを作って、 PlayerCom と PlayerHuman クラスを派生して・・・
- 964 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 06:03:54 ]
- GameMaster クラスを用意して本物の盤面をいじれるのはそのクラスだけにして…
- 965 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 06:05:41 ]
- PlayerCom からも複数のクラスを派生して・・・
- 966 名前:ちんこ [2007/06/25(月) 07:14:38 ]
- そんなにクラス作るのか。
PlayerからPlayerComとPlayerHumanを継承 PlayerComから複数はなんで? もしや思考パターンを変える為?
- 967 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 07:32:33 ]
- ちんこ死ね
- 968 名前:ちんこ [2007/06/25(月) 07:36:38 ]
- 初心者歓迎スレなのに・・・
クラスを使ったものとしてはC++かつGUI以外でははじめて もう何がなんだか分からんとです。 まずUML勉強した方がいいかな? 生半可に利用するのはおれのタチじゃない、オブジェクト指向なら徹底的にオブジェクト指向にしたい。
- 969 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 07:53:01 ]
- はいはいわろすわろす
- 970 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 07:53:12 ]
- ○×ゲーム程度なら、まず非オブジェクト指向で作ってから
設計をやり直してオブジェクト指向にするのが(勉強には)いいと思う。
- 971 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 07:59:30 ]
- >>968
愚かな一貫性は小人物に憑いたお化けである
- 972 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 08:03:07 ]
- まあ、色々なパターンで作って、
それぞれのプログラムの性質を比較してみるのも勉強になるよね。
- 973 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 08:13:38 ]
- そろそろ次スレの季節だな。
- 974 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 09:55:20 ]
- 定刻も、過ぎてることだしな
- 975 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 12:02:09 ]
- 次スレ立てた
【初心者歓迎】C/C++室 Ver.39【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1182740506/
- 976 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 12:03:14 ]
- 乙
- 977 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 22:36:14 ]
- VisualC++2005です。switch文で以下のように下にcaseが続くと変数の宣言と同時に初期化できません。
これは何故でしょうか? case 1: int i=1;//int i; i=1;ならOK break; case 2: break;
- 978 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 22:38:42 ]
- case 1 に飛んだ場合はいいけど、
case 2 に飛んだ場合は i が使えるのに 初期化の位置を飛ばしてしまう。 だから、そういうことはできないようになってる。 case 1: { int i = 1; } break; みたいにブロックで囲むといいよ。
- 979 名前:977 mailto:sage [2007/06/25(月) 22:54:36 ]
- ありがとうございます。そのようにします。
- 980 名前:デフォルトの名無しさん [2007/06/26(火) 21:11:34 ]
- >>913-918
ありがとうございました。
- 981 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 22:34:30 ]
- >>978
横レスだが なるほど 時間があれば言語仕様もきっちり読んでおけってことか
- 982 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 22:55:00 ]
- 時間が無くても言語仕様は嫁
- 983 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 23:21:51 ]
- 必須かよorz
プログラム開発の面接を受けた感触として ひょっとしたら読まなきゃかもなーとは思ってたが
- 984 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 23:24:17 ]
- 必要があれば読みたくなるだろうからそれまでは別に無理して読まなくて良いよ
経験があってこそ初めて理解できるような部分もあるし
- 985 名前:デフォルトの名無しさん [2007/06/26(火) 23:52:05 ]
- C++で一時オブジェクトを関数に渡す時に値渡しするしかないんですか?
boost::functionとかそれだけで40バイトぐらいあるから何とか参照渡ししたいんですが 右辺値を参照で渡せるような何か良い手段ありますか?
- 986 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 23:52:50 ]
- constのことかーーーーーー?
- 987 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 23:59:47 ]
- あああ、const参照にはこういう使い方もあったんでうsね
どうもです
- 988 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:09:12 ]
- 亀だが
charとかshortは演算途中で内部的にintに無理矢理キャストされることがある 理由は>>941の通り だからキャストのオーバヘッドまで考慮するとintの方が速い場合が多い
- 989 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:23:42 ]
- >>988
「ことがある」じゃなくて、その動作が標準として規定されている。
- 990 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:27:02 ]
- ちなみに
windows.hのBOOL型は実際はlongのtypedefで TRUE = 1, FALSE = 0 Cだと_Bool型で _Bool型は符号なし型として扱われる _Bool型には signed, unsigned はつけられない _Bool型は 0 と 1 を格納できれば十分なサイズ _Boolに変換するときその値が0なら0、それ以外は 1 _Bool型はどの標準整数型ランクよりも小さい ビットフィールドに無修飾版の _Bool をおける 引用(ttp://seclan.dll.jp/c99d/c99d05.htm)
- 991 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:29:54 ]
- >>989
そうか、すまん俺の勉強不足だった
- 992 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:19:35 ]
- sdk\include>grep typedef.*BOOL WinDef.h
File WinDef.h: typedef int BOOL;
- 993 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 03:34:17 ]
- >>989
格上げされない場合もあるわけだが。
- 994 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 03:52:27 ]
- >>993 sizeof ぐらいじゃね?
- 995 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 04:18:22 ]
- 今更だけど、C/C++とC99は別物だと思う。
- 996 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 05:44:06 ]
- 「演算途中で」となるとまあ sizeof くらいなのかな?
あ、いや、キャストもか。
- 997 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 07:02:02 ]
- 【初心者歓迎】C/C++室 Ver.39【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1182740506/ 念のためにもう一度貼っとくよ〜 二重に立てるような無駄を防ぐためだよ〜
- 998 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 12:26:27 ]
- >>992
MSのやつはバージョンによって違うらしいぞ
- 999 名前:デフォルトの名無しさん [2007/06/27(水) 14:45:41 ]
- 1000ゲトー
- 1000 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 14:46:23 ]
- 。 + 『1 0 0 0 G E T ぃ ゃ っ ほ ぉ ぉ ぉ ぅ ー !』 * 。 .
. * . * + 。 。 + __ _ /ヾ_/ヽ 旦 f ミv'´{ごづヾ彡 , '´⌒'v'ヾ '´ ̄`ヽ * 。 ゙i´!(((从 从リ ! ifi」liリ゙l i!卯、 (((/从从 i !○(l ^ヮ゚ノ!| i * |i、゚ヮ^ |!)○゙ 。 从゚- ゚ ||○ * ノノ ヽ)本iO ヾ Oi本(~/ヽ OL介_(ノ . + ガタン||| ((´ く/_i_iヾ )) ||| /i_i_ヾ> ) )) ||| + /_|_|ヾ> |||ガタン +  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ロ リ 最 強 ! 華 麗 な 1 0 0 0 に 超 感 動 !
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|