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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:35:36 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/

744 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 03:44:59 ]
C++のテンプレートについて教えて
クラスとどう違うんだ?

745 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 03:49:36 ]
次元が違う

746 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:18:25 ]
違いすぎて逆に説明が困難だな。

747 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:19:38 ]
訂正
C++のテンプレートについて教えて
やっぱクラスとの違いじゃなくてどういう時に使うのか
どんなニーズによってできたのか教えて

748 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:27:42 ]
型が違うだけで同じような処理を何回も書かないで済むように

749 名前:デフォルトの名無しさん [2009/06/08(月) 06:46:52 ]
今年女子大に入ったばかりのゆきこと言います。
C++を学びたいのですが、どの本がお薦めでしょうか?


750 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:47:04 ]
>>744
天と地ほど違うと思うけど。

[タイヤキを作るための金属の鋳型]

[食べられるタイヤキ]
の違い。ぜんっぜん違う。


751 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:56:11 ]
>>742
このスレに行け。
【コメント】doxygen【コンソメ】
ttp://pc12.2ch.net/test/read.cgi/tech/1212144627/

オススメは以下。
Graphviz
ttp://www.graphviz.org/
doxygenの文字化け対策 - 僻地のプログラマkmt-t - わりとどうでもいい日記 1.1
ttp://d.hatena.ne.jp/kmt-t2/20090403/1238718375
Let’s use doxygen!
ttp://www.fides.dti.ne.jp/%7Eoka-t/doxygen.html
無題ドキュメント
ttp://www.sat.t.u-tokyo.ac.jp/~tetsuya/homeNew/research/Tips/doxygen.htm
SourceForge.net: sakura-editor ≫ DoxygenComment
ttp://sakura-editor.wiki.sourceforge.net/DoxygenComment
Doxygenマニュアル
ttp://www.doxygen.jp/manual.html
Doxygen公式
ttp://www.doxygen.jp/


752 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 10:12:17 ]
>>750
それクラスとインスタンスの違いでなくて?
テンプレートはその鋳型を付け替えるとタコ焼にも今川焼きにもなる台とか



753 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 11:03:19 ]
型チェックしてくれるマクロとでも思えば。

754 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:56:01 ]
なんだかtemplateってbindに似てるね

755 名前:デフォルトの名無しさん [2009/06/08(月) 13:03:26 ]
コンストラクタの引数の値によって、データメンバの型を変える方法ってありますか?

756 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:24:48 ]
>>749
女子供は股開いてればいいんだよ

757 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:34:28 ]
子供もかよ……

758 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:49:24 ]
ぼくおとこのこだよ…

759 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:58:54 ]
>>755
同じ親クラスから継承した子クラスという条件内であれば可能。

もしくは、void*で持たせれば、多分なんでもおkだけど。

760 名前:750 mailto:sage [2009/06/08(月) 16:12:44 ]
>>752
そうとも言えるな。
なら俺方式で言うなら
クラステンプレート=[タイヤキやら今川焼きやらを作るための金属の鋳型を作るためのナニモノか]
クラス=[タイヤキを作るための金属の鋳型]
インスタンス=[食べられるタイヤキ]
とでも言えばいいかな。

761 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 16:55:30 ]
喩えなら何とでも言えるわ。

762 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:42:54 ]
名前空間について質問です。

名前空間 foo と、それとは別に名前空間 bar::foo があるとします。
このとき、bar の内側から、bar::fooでは無い方の foo を指定するにはどうしたら良いのでしょうか。

なお、環境はWinXP、C++、VisualStudio2005です。




763 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:46:20 ]
::foo

764 名前:762 mailto:sage [2009/06/08(月) 17:53:04 ]
すみません、2つ質問するつもりで書いてませんでした。

あるクラス内に、別クラスをメンバ変数として取り込む時、
その別クラスが書かれたヘッダファイルをインクルードするのではなく、
先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね?

さて、その別クラスの名前が、名前空間 bar の下にあるとき、
namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか?


>>763
ありがとうございます。
なんで思いつかなかったんだろう、自分。

765 名前:デフォルトの名無しさん [2009/06/08(月) 18:40:27 ]
便乗質問、テンプレートクラスを持たせる時って同じ方法使えるん?

766 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:48:37 ]
使えるん

767 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:51:59 ]
>>764
あなたのいうクラスに名前が付いていないので
説明の便宜上
あるクラス=MyClass, 別クラス=fooとします。

まずは本題からちょっとそれた話から。
 > その別クラスが書かれたヘッダファイルをインクルードするのではなく、
 > 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね?
あります。
しかし
 > あるクラス内に、別クラスをメンバ変数として取り込む時、
この場合は前方宣言Forward declarationだけでは足りません。
というのも、
class MyClass {int m_num;std::string m_str;foo m_var;}
のようにメンバ変数としてfoo型変数を使いたい場合、
fooが不完全型なのでそのサイズがわからず、したがって
MyClassのために確保すべき領域のサイズもコンパイラには分からないことになるからです。
前方宣言で足りるのはfoo型メンバ変数ではなく
foo型への参照型メンバ変数やfoo型へのポインタ型メンバ変数、
あるいはメンバ関数の戻り値としてfoo型を使用する場合などです。


768 名前:デフォルトの名無しさん [2009/06/08(月) 18:54:54 ]
ユーザが入力した数式を処理するプログラムを考えているのですが
cin>>eq;
#define function(x) (eq)
cout<<function(1);

みたいなことができませんんか?もしくは別の方法があったら教えてください

769 名前:767 mailto:sage [2009/06/08(月) 18:54:56 ]
あとはまあ
前方宣言で足りるのは
メンバ関数の引数の型としてfoo型を使用する場合

typedefとかかな。
 > さて、その別クラスの名前が、名前空間 bar の下にあるとき、
 > namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか?
それでいいと思いますが。
class bar::foo;とか書いても無理ですし、それ以外記述できないですよねぇ?

もし有識者がいらしたらそっちを信用してください。


770 名前:767 mailto:sage [2009/06/08(月) 18:56:45 ]
>>768
意味不明ですが、どういうことですか?
プリプロセッサにより
cin>>eq;
cout<<((eq));//xは無視される
として処理されるだけですが。。。

771 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:01:07 ]
>>770
768に書いたのはあくまでイメージです。言葉足らずですみません
私がしたいことは引数にある文字列を数式として扱いたいのです
もしくはcinで入力した式をプログラムで処理したいのですが


772 名前:デフォルトの名無しさん [2009/06/08(月) 19:02:27 ]
ほんとは言語の問題じゃないかもしれないけど教えてください

@double配列と、Aメンバがdoubleいっこだけの構造体の配列を読み上げる速度を比較するための
コードを書いて実行してみたらAのほうが速かったです

環境はItanium、CentOS、GCC(C++)です

これはなぜなんでしょうか?



773 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:04:08 ]
そうなったから

774 名前:767 mailto:sage [2009/06/08(月) 19:04:19 ]
>>771
言いたいことは分かりました。
C++の知識はどのくらいありますか?
STLやBoost C++はご存じですか?
C言語じゃなくてちゃんとC++らしいコードが書けますか?

775 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:05:31 ]
>>772
不思議だわ。
・・・最適化とかレジスタの割り付けとか、もう不確定要素に押されて結果が揺らいでるだけじゃないか?

つまりどっちで書いても大差ないから好きな方で記述すればよか。

776 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:08:39 ]
>>774
c++は初めて3か月くらいですが、STLはつかったものがあるので
簡単なものなら大丈夫だと思います。

777 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:09:25 ]
>>775
計算時間半分くらいでした

ちなみにこれに気づいたのは構造体メンバのアライメントに関する実験中でした




コンパイラが賢くなりすぎてマニアックな知識も必要ない時代になったんですかねえ・・・

778 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:11 ]
普通のポインタがインスタンスを持ってるかどうか判別する方法はありますか?
現状ではポインタのゼロ初期化とdelete・0代入を徹底するぐらいしか手段が思いつきません

779 名前:767 mailto:sage [2009/06/08(月) 19:11:28 ]
>>776
せっかくSTLの知識の有無を聞いたのですが、STLつかった実例が見つかりませんでした。
とりあえず適当なリンクを張っておきます。

以下の中で、上に挙げられている物の方が
より優れていると思ってください。

letsboost::spirit
ttp://www.kmonos.net/alang/boost/classes/spirit.html
数式解釈プログラム - uPage
ttp://www-as.dse.ibaraki.ac.jp/umezu/?%E6%95%B0%E5%BC%8F%E8%A7%A3%E9%87%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0
七行プログラミング
ttp://cm.xrea.cc/thread/program_001.html

LISPですが
記号数式処理
ttp://www-antenna.ee.titech.ac.jp/~hira/hobby/symbolic/index.html


780 名前:767 mailto:sage [2009/06/08(月) 19:13:06 ]
追記。
>>776
Spiritで数式を解釈させるなら
boost::spiritっちゃえ!
ttp://tamachan.club.kyutech.ac.jp/%7Egridbug/spirit/
C++ Labyrinth
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html
Spirit v1.6
ttp://boost.cppll.jp/BDTJ_1_30/libs/spirit/
これらが有名で質も高いと評判です。


781 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:14:34 ]
>>768
これでイメージが湧いたらそいつは一流のエスパーだwwwww

782 名前:767 mailto:sage [2009/06/08(月) 19:17:06 ]
>>778
>普通のポインタがインスタンスを持ってるかどうか
有効な領域を指し示しているかどうかとおっしゃりたいものと推測・解釈します。
結論から言えば、
普通のポインタでしたら、そんな方法はありません。
指し示す領域が有効かどうかなぞわかり得ません。



783 名前:768 mailto:sage [2009/06/08(月) 19:22:56 ]
>>782
いろいろ情報ありがとうございます。


784 名前:764 mailto:sage [2009/06/08(月) 19:45:30 ]
>>767>>769
ありがとうございます

>宣言
やっぱ namespace bar { class foo; }; って書くしか無さそうですね。
階層が深いとちょっと面倒かな?と思っただけなので、特に問題はありません。

>メンバ変数
確かに、メンバ変数を直接弄ろうとすると前方宣言だけじゃダメですよね。
まあ、素直にアクセサ付けれ、って話ですが。


>>765
確かに、 std::string とかは上記の方法じゃ出来ないですね。


785 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:11:52 ]
C++の関数で文字列を参照渡しする方法がわかりませ
ん &stringだと弾かれたし

786 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:16:09 ]
>>785
参照の記述を勉強してください。
クラス名& ref=参照先;
で記述します。


787 名前:785 mailto:sage [2009/06/08(月) 20:23:15 ]
参照の書き方って&nと違うの?

788 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:31:10 ]
>>787
まずは日本語から覚えた方がよさそうだな

789 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:33:46 ]
char &string;
って書いてるんだったりして。

790 名前:786 mailto:sage [2009/06/08(月) 20:36:41 ]
もう らちがあかないので

ソースみせるか、
参照の記述を勉強し直すか、
名前空間を記述するか

せめて少なくとも1つはやってみせてください。
なんかアドレスとごっちゃになってそうな予感もしますね。

791 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:39:25 ]
int func(const char *string)

792 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:40:24 ]
途中送信。>791を参照渡しにする



793 名前:786 mailto:sage [2009/06/08(月) 21:04:14 ]
>>791
それだけエスパーを強制しすぎです。

適当に答えるなら
//before
int func(const char *string);
const char * const p="mojiretsu";
func(p);
がアドレス渡し(ポインタ渡し)で、
//after
int func(const std::stirng &string);
std::string str="mojiretsu";
int func(str);
が参照渡しです。

せめて前後関係の分かるソースを見せてください。
答える側が書いたソースの方が長いっておかしいです。


794 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:16:08 ]
foo *p = new foo[bar]; delete p;
がまずいのはわかるんだけど
foo *q = new foo; delete [] q;
ってーのはべつにやばくない・・・よね?

795 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:16:58 ]
やばいよ。何が起きても知らないよ。

796 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:17:12 ]
std::stringで書き変えるのは要求を満たしてない気がするなあ。

797 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:19:34 ]
>>794
配列をnewしたときは、その配列のサイズなんかも保持しておくので
配列じゃないのにdelete[]だと、関係ない部分にアクセスする危険性がある……と教わったが、正確には違うかも。

798 名前:786 mailto:sage [2009/06/08(月) 21:21:37 ]
>>796
彼は
>C++の関数で文字列を参照渡しする方法
と言っています。
別にconst char*型変数を参照渡ししてもいいんですが、
もうエスパーするしかないからわかりませんよ。


799 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:23:02 ]
>>794
だめな理由は処理系によりいろいろあるだろうけど、そんなの関係ない。
「仕様上認められていない」ってだけで
十分に鼻から悪魔が出てくると結論づけられます。

800 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:26:52 ]
C++はめんどくさいな

801 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:36:37 ]
>>800
なにを今更w

802 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:50:39 ]
C++に限らず、多種多様の実装が存在する言語は多かれ少なかれそういう傾向にあると思う。



803 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:34:58 ]
doxygen = デュクシジェン

804 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:06:17 ]
doxygen destroyer

805 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:19:56 ]
>>804
pc11.2ch.net/test/read.cgi/gamedev/1238520070/692

692 :名前は開発中のものです。:2009/06/09(火) 00:57:34 ID:2fI/sHFo
何言ってんだ。プログラマにまともな精神持った奴がいた試しなんてねえよ。
第一プログラマと精神科なんてほとんどセットなのに今更それを語るとか情弱以下だろ。

806 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:31:40 ]
C言語をやりたいんだけど

Microsoftのc++ExpressEdition
ってのでもできますか?

#include <stdio.h>
int main(void){
printf("aaaa");
return 0;
}
みたいなのもちゃんとできますか?

807 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:09:32 ]
>>806
Microsoft Visual C++ 2008 Express Edition
の事ですね。
可能です。
ですが、最初はコンソールの方が分かりやすいと思いますよ。
C/C++初心者なら
bcc5.5.1+bcc developer
がなかなかオススメ。
エラーメッセージが分かりやすいので。
複雑なテンプレート等、まともなC++をやりたくなったらその時初めて
Microsoft Visual C++ 2008 Express Edition
gcc3.x, gcc4.x
などを試せば良いかと思います。


808 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:17:19 ]
まあ鼻から悪魔が出ることは無いと断言できる

809 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:45:37 ]
C/C++というよりLinuxの質問になってしまうのですが、
mq_sendとmq_receiveでメッセージキューのパラメータに
任意の構造体を渡すことはできますでしょうか?
関数仕様ではchar*のみのようですが。

メッセージキュー以外の方式で別プロセスに任意の型の
値を渡す代替案があればそれでも良いのですが。

810 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:10:40 ]

mmapとかpipeとか
プロセス間通信は、Linuxの方で聞いた方がいいかもね

811 名前:デフォルトの名無しさん [2009/06/09(火) 16:13:22 ]
使ったこと無いけど
文字列にシリアライズして渡すんじゃねーの
そんな雰囲気のある関数っぽい


812 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:07:30 ]
>>809
昔は, 任意のバイト列に対するポインタは char* を使っていた
で, 関数使用はその名残だと思うんだわ

# kernel 内部の caddr_t とかの絡みもあるとは思うが………

構造体とか配列とかもバイト列として表現できるわけだから,
キャストすれば何でも可




813 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:08:35 ]
>>812
× 関数使用は
〇 関数仕様は


814 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:27:02 ]
なるほど、ありがとうございます。
mmapとかの共有メモリがお手軽そうですね。

>>812
やはりできるんですね。やろうとしてsegvでちゃったん
ですが、できるとわかればもうちょっと調べてみます。


815 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:29:28 ]
vectorのmax_size()って中の人はどうやって計算してるの?

816 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:51:40 ]
bad_alloc出した場合って普通何をするもんなのかな
・APIとかで開いた画像ファイルとかを閉じる
・そのメソッドで確保成功した分のメモリを開放する
・そのメソッド内での仕事が完了したらbad_allocを上に投げる
・再帰的に開放作業を繰り返して、一番上でプログラム終了
とかでいい?

817 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 18:01:25 ]
>>815
gcc 4.1は単にsize_type(-1) / sizeof(value_type)を返してた。
VC2008は、上の値とアロケータの最大サイズと比較してちっさい方返してた。

818 名前:デフォルトの名無しさん [2009/06/09(火) 19:52:52 ]
void Initialize(){
ここで配列を5本動的確保

}

そしてこの関数で使いたいんですがどうすればいいですか?
void calc(){

}
calcは何度も呼び出すのでcalc内で動的確保するのは無駄だと思いました。

819 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:03:38 ]
template <typename _T,int _Size>
class hoge
{
private:
  std::vector<_T> _vec[5];
public:
   void Initialize(void)
  {
    for(int i=0;i<5;++i) _vec[i].reserve(_Size);
  }

   void calc(void)
  { 以下略

};


820 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:09:32 ]
vectorとかのコンテナのサイズを変えるときはtry-catch(bad_alloc)したほうがいいの?

821 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:17:52 ]
>>819
できればSTLなしで・・・

822 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:48:36 ]
>>821
お前の質問に対する答えが>>819なわけだが、STLがその答えの本質じゃないことぐらい判るだろ。
コードを一から書いて欲しいなら宿題スレ行ってこいよ。



823 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:17:14 ]
内容がC++からちょっとずれますがお願いします。
大学ではじめてのC++で勉強しているのですが、phpの初心者向けサイトで
コードをみたところc++と似ていて驚きました。c++はphpにも応用が利くと聞いたのですが、
C++をどの程度できるようになればphpでも簡単なwebサービスをできるでしょうか?

824 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:32:03 ]
C++をいくら極めてもwebサービスはできんじゃろ。
なんせ標準ライブラリにwebに関するものはまったくはいっとらんからな…。

825 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:33:51 ]
>>821
STLなしでとか何言ってるの?
まさかSTLない環境でやってるわけじゃなくて知識がないだけでしょ?
ちょっとで良いから勉強しろよ。

826 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:34:11 ]
>>814
Linux の実装はしらんが, Solaris とか *BSD とかの実装だと,

mq_send で msq_ptr からサイズ分 kernel 内バッファにコピーして,
mq_receive で該当領域を読み出し側にコピーする

で, kernel は該当領域にアクセス可能か否かの test 程度は行っている
ので, とんでもない引数を与えると EINVAL か何かが返るはず

segv が発生するのは, mq_receive で, msq_ptr として与えた領域サイズより
大きな msg_len を与えてスタック書きつぶしたときくらいじゃ内かな?


827 名前:デフォルトの名無しさん [2009/06/09(火) 21:34:16 ]
文字処理が面倒だけど
cgiで起動すれば出来るんじゃね。


828 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:36:02 ]
0から99までの乱数を表示するプログラムを作ったんですが、コンパイルしたらまた新たな乱数を表示するにはどうすれば良いのですか?


829 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:42:11 ]
>>828
乱数系列切り替えればええんちゃうの?


830 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:44:31 ]
時刻でも乱数シードに使えばいい

831 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:46:56 ]
>>828
乱数の生成方法によって違うけれど乱数の種を設定できる仕組みがあるはずだからそれで種を変更する。

832 名前:デフォルトの名無しさん [2009/06/09(火) 21:50:14 ]
>>829-831
ありがとうございます。
すいません。
かなり初心者なので、出来れば、詳しくお願いします。
今main関数の中が
cout<<rand()%100<<endl;
だけなんですが、何かつけ加えますか?



833 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:54:17 ]
>>832 そうゆう話なら取りあえず処理系の名前を書け


834 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:54:55 ]
↓以下乱数の質について

835 名前:デフォルトの名無しさん [2009/06/09(火) 21:56:53 ]
箱を開けたら猫

836 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:58:12 ]
>>833
bcc32です。

837 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:06:15 ]
メルセンヌツイスタでぐぐるといいよ

838 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:10:23 ]
>>836
けっして誉められた手法ではないんだろうが
おそらく
sland(time(NULL))
とかやっとけば?

>>834 が期待してるように
用途に応じて生成される乱数の品質とかアルゴリズムとかが問題になる
置くの深い部分だけどな


839 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:18:59 ]
標準の乱数は大きな素数を割ってるだけみたいな単純な実装なので
それをそのまま使うとカルドセプトサーガみたいなことになるかもね♥

840 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:25:25 ]
>>838
ありがとうございます。
やってみます。

841 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:31:08 ]
>>837
ありがとうございます。
参考にしてみます。

842 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:33:38 ]
どういたしまして



843 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:59:13 ]
質問したいのですが誰かいますか?

844 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:00:12 ]
います

845 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:11:32 ]
じゃあ質問させていただきます。
今、作っているプログラムはあるファイルから特定の部分の値を読み込み
値だけのバイナリファイルを書き出すプログラムを作っているのですが。
sstreamを使い、値を変数に格納したいのですがfloat型だと格納できるのですが、
int型だと格納されません。
どうしてか教えてください。
ソース:
stringstream ss(f_buf);

int test[16 * 3]; //ここがint型だと値が入らない

for(int i = 0; i < (16 * 3); i++){

ss >> test[(i * 3)] >> w >> test[(i * 3) + 1] >> w >> test[(i * 3) + 2] >> w >> w;

}

データ:
0;1;2;,
1;2;3;,


846 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:13:48 ]
>>845

追記

stringstream ss(f_buf);の下に
char w; //記号を飛ばすための変数

847 名前:デフォルトの名無しさん [2009/06/10(水) 01:19:14 ]
どうしてでしょう?

848 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:20:34 ]
わからん

849 名前:デフォルトの名無しさん [2009/06/10(水) 01:27:14 ]
どなたか>>845の理由が分かる人いますか?

850 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:29:17 ]
たとえば古いgccはstringsteamの中身に挙動不審なバグがあるので、それが原因かもしれない。
今やってみたらとりあえずgcc 4.1とVC2008はどっちもちゃんと動いた。

#include <iostream>
#include <sstream>

using namespace std;

int main(void)
{
  int t[3];
  char w;
  stringstream ss("1,2,3,,");

  ss >> t[0] >> w >> t[1] >> w >> t[2] >> w >> w;

  cout << t[0] << " " << t[1] << " " << t[2] << endl;

  return 0;
}

出力
1 2 3

851 名前:デフォルトの名無しさん [2009/06/10(水) 01:34:22 ]
>>850さん、ありがとうございます。
環境をかくの忘れてましたね…
環境はVC2005です。
>>850さんのソースも試してみましたがやはりだめなようです…
変数を作った時の不定な値が入ったままでした。
2008でビルドしてみようかな…

852 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:06:43 ]
あるディレクトリ下にあるファイルを読み取ってから削除するという処理をしているのですが、希にコピー途中のものを読み取ってしまい、
思ったような動作が出来ない場合があります。アクセスしようと(もしくはアクセス中の)ファイルが、コピー中であるか否かの判断は
一般的にどのような方法で実装するのでしょうか。



853 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:07:49 ]
>>852
OSは?

854 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:09:47 ]
>>853
Windows 2000/XP です。コピー元は同じPC上の時もあれば、ネットワークを介して他PCからの場合もあります。

855 名前:853 mailto:sage [2009/06/10(水) 10:19:57 ]
俺はUNIX屋なので、後は誰かに任せた。

856 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:04:35 ]
>>854
writeオープンしてからコピーする

857 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:55:21 ]
FILE_FLAG_DELETE_ON_CLOSEフラグ付けて開くとか

858 名前:デフォルトの名無しさん [2009/06/10(水) 12:41:47 ]
std::stringでTCHAR扱えないので
std::basic_string<TCHAR>を使うってのはグーグル先生でわかったんですが、
入出力の方法が今度はわかりません。グーグル先生に聞いてもわかりませんでした。
std::cinやstd::coutの代わりにどのように使うんでしょうか?

859 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:19:21 ]
//hoge.h
class CHoge {
public:
 void hoge();
};

//hoge.cpp
#include "hoge.h"
void CHoge::hoge() {・・・};

このCHoge::hogeを省略してhogeだけで書きたいんですけどそういうことはできますか?
なぜかusing CHoge::hogeではできませんでした

860 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:22:27 ]
名前空間じゃなくてクラス名か。
全然「なぜか」じゃねーw

どうしても面倒なら、ヘッダファイルに中身も書いたら?

861 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:30:00 ]
C#を使えばおk

862 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:34:07 ]
>>858
wstring & wcoutを使う。

>>859
#define hoge CHoge::hoge



863 名前:デフォルトの名無しさん [2009/06/10(水) 14:51:54 ]
+とか+=とか、そういった四則演算関連の演算子オーバーロードを作成したいのですが、
ネットで見ると、戻り値が参照だったり実体だったりして、演算子によって違うみたいです。
どういう考え方で参照と実体の使い分けをしているのでしょうか?


864 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:58:39 ]
関数を抜けても壊れない参照を返せるなら基本参照返し。
一時オブジェクトを返さざるをえないなら泣く泣く実体返し。

865 名前:デフォルトの名無しさん [2009/06/10(水) 15:49:30 ]
float型の変数がゼロかどうか(誤差も含めて)判断するときに、
1e-4fみたいな数字で比較を行っているコードを見たんですが、
こういう数字の記述の仕方(意味)を説明してるウェブページをどこか知りませんか?


866 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:53:30 ]
科学表記とかでぐぐる

867 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:32:36 ]
初歩的な部分ですが、

while(i--) 処理

は「iの値が評価され、処理を実行するか決定する」→「iがデクリメントされる」

while(--i) 処理

は「iがデクリメントされる」→「iの値が評価される」

ということで、i>0なら前者は処理が i 回、後者は (i - 1)回行われるということでよいのでしょうか。

868 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:34:44 ]
コーディングの最終段階に入っていて、
なるべく見通しが良くなるように関数に処理を分割したりしています。
a,b,cという関数が有って各関数はうまく行けば0を返し失敗すれば1を返します。
aがうまく行けばbを,bがうまくいけばcを行いcがうまく行けば
最後に少量の出力が有ります。
そこで、今の段階はプロトタイプとして
int main()
{
if(a == 0) {
if(b == 0 {
if(c == 0{
//some print
}
}
}
return 0;
}
となっているのですが、ネストが深くなりすぎているような気がしてなりません。
なにか良い方法が御座いましたらご教授願います。

869 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:37:21 ]
if (!a && !b && !c)

870 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:41:00 ]
!(a||b||c)

871 名前:868 mailto:sage [2009/06/10(水) 17:43:50 ]
見落としていた点が有りました。
追加で書きますがお許しください。
aが失敗すればプログラム終了
bが失敗すればプログラム終了
cが失敗すればプログラム終了
とそれぞれ行いたく思います。
よろしくおねがいします。

872 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:50:39 ]
それは a が false を返す代わりに exit(1) を呼び出せばいいじゃないか^-^



873 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:57:00 ]
>>872
そうなんですよね、一度そのような事を考えたのですが
言語はC++なのですが、
kmaebashi.com/bbs/bbs12.html
というページを見かけてなんとなく怖くなってexit()を使わなくしたのですが、
実際どうなのでしょうか?
よろしくおねがいします

874 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:09:17 ]
どっちにしても>>869>>870でOK。

875 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:11:32 ]
>> 874
ありがとう御座います。
無事きれいになりました!!
感謝感激です。

876 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:52:22 ]
C++にはJavaのObjectクラスに相当するようなものは無いんでしょうか?

Java使い向けに書かれているデザインパターン本を読んでて
脳内翻訳するのに必要になったもので

877 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:59:05 ]
全然別人が話に食いつきます。
>>873が言う
>ISO/IEC 14882:1998 3.6.1-4
>exit 関数を呼び出すことは現ブロックを抜けずにプログラムを終了させることであるため、
>自動記憶域期間を持つオブジェクトは破棄されない。
>静的記憶域機関を持つオブジェクトのデストラクタ中から
> exit を呼び出すことは、未定義の動作を引き起こす。
これって
巻頭言 2000〜
ttp://park1.wakwak.com/~y-nagano/200001.html
ここに書いてあるとおりなんだろうが、
恐ろしいよねぇ。


878 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 19:37:24 ]
もよもと exit はプログラムの異常終了時くらいしか使わんからなー。

879 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 20:17:11 ]
>>858
自分で作ればいい。
#ifdef UNICODE
# define tcin std::wcin
# define tcout std::wcout
# define tcerr std::wcerr
# define tclog std::wclog
#else
# define tcin std::cin
# define tcout std::cout
# define tcerr std::cerr
# define tclog std::clog
#endif
あと、mainの頭で、文字コード変換が行われるように指示しておく。
std::locale l(""); // 数値を取り扱うならstd::locale l(std::locale::classic, "", std::locale::ctype);のほうがよいかも。
tcin.imbue(l);
tcout.imbue(l);
tcerr.imbue(l);
tclog.imbue(l);

880 名前:デフォルトの名無しさん [2009/06/10(水) 20:57:45 ]
C++なら例外使えばいいのに

881 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:00:13 ]
>>880
誰もキャッチできない例外をスローするってこと?

みんなはそうしてるの?

882 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:03:14 ]
例外のよい使い方がいまだにわからん



883 名前:881 mailto:sage [2009/06/10(水) 21:14:30 ]
>>882
俺は
関数の戻り値は正常値ならおk、
異常値を返す場合は-1とか0とかそういう値に限り、
不完全なオブジェクトを返すような形は
とらないようにしている。
そして不完全なオブジェクトを返さざると得ない時に
例外を使っている。

・・・でもやっぱり俺もわからない。

884 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:15:49 ]
ttp://pc12.2ch.net/test/read.cgi/tech/1241438694/
ここの>>740が妙な提案をしていたよ。
もっとも実際には出来なさそうって結論になったのだが。

885 名前:デフォルトの名無しさん [2009/06/10(水) 22:06:18 ]
ABCが失敗したら例外発生させて、キャッチして適当に処理して return 0 すればいい。


886 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:24:46 ]
VC++を勉強するのにお勧めの本ありますでしょうか?
初級〜中級くらいをめどに

887 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:29:14 ]
いわゆるぺゾルト本。
Programing Windows 第5版。

定番なので。

888 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:32:10 ]
>>886
VC++だから、MFCかも知れないが
普通にSDK使う程度なら、wisdomとか入門サイトから見るといいよ
俺はいろいろなサイト見て学んだ

889 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:33:06 ]
>>887
www.amazon.co.jp/Programming-Windows-Microsoft-Charles-Petzold/dp/157231995X/ref=sr_1_1?ie=UTF8&qid=1244644307&sr=8-1

これのことでしょうか?すごくとっつきにくそうなんですが

890 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:37:56 ]
今時MFCはどうかと思うけど、お勧めの本はなさす。
中級以上なら、Effective C++のシリーズお勧め

891 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:38:07 ]
この本は原著じゃなくても翻訳はまともだから大丈夫だよw

プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版!
(Microsoft Programming Series) (単行本)

まぁ…とっつきにくい感じはするかなぁ。
まぁ、あくまで定番ってことで。

892 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:40:51 ]
Effective C++はもちろん名著だけど、VCの勉強にはならんじゃろw



893 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:16:36 ]
質問です

Cでファイルに書き込むときに
fwrite(str, 1, strlen(str), fp);
fwrite(str, strlen(str), 1, fp);
とどちらが一般的ですか?何か違いは出てくるのでしょうか?

894 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:24:08 ]
VC++で、いっぱい書店においてるような本はどうなのですか?
入門〜やや中級手前レベル?の内容くらいかいてるようにはみえたのですが
役に立たないのかな

895 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:56:43 ]
>>894
プログラミング言語を全く知らない人が、いきなりVCに手を出す状況とかなら
決して悪くはないんじゃないかしら?

896 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:49:07 ]
>>893
fwrite(str, 1, strlen(str), fp);
に1票。
なんとなく2番めの引数は型のサイズ、3番めの引数はその個数って
思っている。


897 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 04:45:58 ]
>>893
>fwrite(str, 1, strlen(str), fp);
1バイトをstrlen(str)分書き込む、成功した際の戻り値がstrlen(str)

>fwrite(str, strlen(str), 1, fp);
strlen(str)バイトを1回書き込む、成功した際の戻り値が1

結果は同じ
ただ、意味のあるデータなら後者の方が意味的に良くない?

898 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:13:39 ]
>>895
>プログラミング言語を全く知らない人が、いきなりVCに手を出す状況
そうとうな窮地だな。

899 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:24:29 ]
#include <iostream>
#include <list>
int main() {
std::list<int> nums1;
nums1.push_back(4);
nums1.push_back(6);
std::cout << nums1[0] << std::endl;
std::cout << nums1[1] << std::endl;
return 0;
}
vectorで動いたソースをlistに変更してみたら動かないのでしがなんででしょうか?

900 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:52:45 ]
エラーメッセージ読めよ

901 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:56:21 ]
「動かない」というのはこの場合、極めて曖昧な比喩表現でしかない。
比喩を使われても困る。

902 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 11:17:11 ]
list<int>::iterator p = nums1.begin();
while( p != nums1.end() )
{
cout << *p << endl;
p++;
}
list はランダムアクセス子をもってない



903 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 12:24:09 ]
www.geocities.jp/KY_webid/cpp/library/012.html
なるほど了解した。ありがと

904 名前:デフォルトの名無しさん [2009/06/11(木) 15:57:58 ]
gprofって、対象のプログラムが使うライブラリが全てスタティックリンク
でないといけないのです?
そういうのないですよね?

905 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:09:13 ]
try {
m_pInt = new int [N];
}
catch {
delete [] m_pInt; // <-するべき?それとも放置?
}

906 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:28:03 ]
>>905
m_pIntに予め 0 を入れておけばdeleteしても問題ない

907 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:22:38 ]
>>905
そんなことよりboost::scoped_array使え。

908 名前:デフォルトの名無しさん [2009/06/12(金) 01:31:58 ]
ちょっとした質問です。
二分木の高さと深さは違うものですよね。

909 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:37:26 ]
木の「高さ」とノードの「深さ」のこと?

910 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:46:07 ]
下から見れば高さ、上から見れば深さ、相対的な違いか?

911 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:57:06 ]
視点が違うだけで数としては同じになる

912 名前:デフォルトの名無しさん [2009/06/12(金) 02:04:36 ]
たとえば、a(左部分, 右部分)とあらわす。
aはroot
a(b, NULL)
b(c, d)
c(NULL, NULL)
d(NULL, NULL)
c,dはleaf
という風になっているとします。伝わるかわからないですが・・・
このとき、a,b,c,dそれぞれの高さは2,1,0,0で合ってますか?




913 名前:853 mailto:sage [2009/06/12(金) 02:07:21 ]
Fedora11落としてきたばかりなのに。
最近は自前でカーネルコンパイルするの減ったな。

914 名前:デフォルトの名無しさん [2009/06/12(金) 02:50:17 ]
すいません。だれか僕が作ったプログラミングのデバッグしてくれませんか?お願いします。
初歩中の初歩です。

915 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 02:56:30 ]
お断りします

916 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 03:04:38 ]
とりあえずうp汁

917 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 04:12:14 ]
住所・氏名・連絡先も忘れずに。

918 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:55:46 ]
codepad
ttp://codepad.org/
ってところに貼れ。
貼ってどうすれば良いかは分かると思う。

919 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:53:27 ]
コンストラクタの引き数の規約を与えるための仮想基底クラスを作ることはできますか?

920 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:00:43 ]
codepad.org/WjzXeUiM
エラーがでるのですが
エラーを日本語にしてもらえないでしょうか?

921 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:02:45 ]
>>920
翻訳サイトつかってみたら?

922 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:06:51 ]
codepad.org/qHGkIKzL
う〜ん



923 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:09:35 ]
>>920
どこにエラーが? 警告なら出ているようだけど。

924 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:11:42 ]
三行目を
void print( const char *c )
にすればいいよ。



925 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:13:25 ]
>>920
ほい、エラーを翻訳してやったよ。
--
誤りとして扱われる警告
--


926 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:13:06 ]
R255 G0 B0の赤色の1ピクセルのbitmapのデータ読み込みで
54byte飛ばして色データを読み込んで10進数で表示させたのですが

0
0
-1
0
と表示されます。
0
0
255
0と表示されないのはなぜでしょうか?

927 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:22:52 ]
>>926
charに読み込んでるとか。

928 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:32:45 ]
>>927
charではダメなんですか?
1バイトだからいいかと思ったのですが

char unchi[10000];
fread( unchi, 1, 5000, fp );

とやっています

929 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:36:07 ]
あ、わかりました
charって-127~128ですよね
unsignedにすればいいですか?

930 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:37:24 ]
できました。
お騒がせしてすいません
ありがとうございました。

931 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:40:38 ]
>>929
ビットマップに限った話ではないが
typedef unsigned char uint8;
とでもしておくと楽。
必要に応じてuint16,uint32,uint64もtypedefしといてもいいかと。

932 名前:デフォルトの名無しさん [2009/06/12(金) 15:51:13 ]
char 配列に日本語が入っているとします。
改行コードが\nで統一されている場合に
wchar_tにポインタでキャストしたときに文字化けしない方法はありますか?



933 名前:932 [2009/06/12(金) 16:05:38 ]
キャストしたら\r\nでも文字が正しくなく・・・ 
windowsのwchar_tの文字コードは
UTF16とか効いた気がします・・・

934 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:08:25 ]
mbtowc(wchar_t *wc_str, const char *mb_str, size_t mb_scan_size);

935 名前:932 [2009/06/12(金) 16:10:43 ]
ここに書いてありました。 
EUCやSJISをwchar_t* にキャストして操作しても問題は出ませんか?
表示できないだけで。



ワイド文字 - Wikipedia
wchar_tの内部表現もUnicodeである必要はない。
本来はCode Set Independet(符号化集合に独立)なのである。
しかし、Windowsでは16ビット (UTF-16)、
LinuxやMac OS Xでは32ビット (UTF-32)である。


936 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:30:16 ]
>>935
文字列の終わりの0のサイズが違うんで、キャストしただけじゃ使えないと思う。

937 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:31:42 ]
質問です

int *Array;
int *pNum;

int Num = 10;

Array = new int[1];
Array[0] = Num;

*pNum = Array[0];

デバッグすると、このコードの最後の部分でエラーが起きます
どうすればうまくいきますか?

938 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:34:19 ]
>>937
pNumもメモリ確保しないと。

939 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:38:29 ]
>>938
ああ、なるほど
ありがとうございました

940 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:04:46 ]
ユニコードとかって3バイト以上の文字もありますよね?
wchar_tは2バイトなのにどうやってこれを格納してるんですか?

941 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:25:10 ]
>>940
>wchar_tは2バイト
そんなこと決まってないっしょ?
言語使用上定められているのは
sizeof(char)<=sizeof(wchar_t)
だけじゃない?

942 名前:デフォルトの名無しさん [2009/06/12(金) 19:39:08 ]
つ UTF16



943 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 20:44:25 ]
少なくともうちでは2バイトじゃないから大丈夫だなあ

944 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 20:55:20 ]
cygwinはwchar_tが2バイトっていうイカれた仕様
なのでUTF-8が上手く使えない…

945 名前:デフォルトの名無しさん [2009/06/12(金) 21:04:42 ]
windowsも2バイト

946 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:13:12 ]
そうなのか、失敬した

947 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:55:53 ]
UTF-8はマルチバイトだからchar*で扱うもの

948 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:09:33 ]
16bit整数二つ→32bit整数ひとつと変換して、配列の添え字に使いたいのですが
全部のインデックスからアクセス可能にしようとすると配列がでかくなりすぎてこまります
なにかいい方法はないでしょうか?

949 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:12:12 ]
inline static void foo();

static inline void foo();
とではどちらが正しいですか?

foo()はあるクラスの静的メンバ関数です。

950 名前:949 mailto:sage [2009/06/12(金) 22:16:02 ]
あれ?
MyClassの宣言中では
MyClass
{
//etc
static void foo();
//etc
};
と書き、
そのヘッダの中(ただし宣言の外で)実装を書いて
inline void foo()
{
//実装
};
と書くのがただしいですか?


951 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:19:34 ]
どっちでもいい。
どっちかが正しかったら、憶えなくちゃいけないから大変だ。

952 名前:949 mailto:sage [2009/06/12(金) 22:22:17 ]
>>951
ありがとうございます。



953 名前:デフォルトの名無しさん [2009/06/12(金) 22:23:49 ]
>>948
つ map

mapなら、int x=-1; でも、a[x]がエラーにならない。
google製のmapもある

954 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 23:52:12 ]
>>940
Windows環境ではsizeof(wchar_t) == 2で、UTF-16を格納している。
昔はサロゲートペアはサポートしていないと聞いたような気がするが今はどうだか知らん。

多くの*NIX系環境ではsizeof(wchar_t) == 4で、UTF-32(UCS-4)を格納している。

955 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:08:32 ]
int型の配列に整数だけを代入したいときにはどうすればよいのでしょうか?
isdigitが数字かどうかの判定が出来るというので、使ってみたら、エラーが出ます。
これがソースの一部です。
for(i = 0; i < 10; i++){

while(isdigit(a[i]) == 0){
printf("%d個目の整数です。\n",i+1);
fgets(buf, 10, stdin);
sscanf_s(buf, "%d", a[i]);
}
}
whileの中身をどうにかすればうまくいくと思うんですが。

956 名前:デフォルトの名無しさん [2009/06/13(土) 02:14:55 ]
いろいろとだめだろ。
&がついてないし、入力後に確認すればいいものをループの上で判定するし
たとえば変数xに数字が入っていたら代入すればいいし。



957 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:15:07 ]
ソースの一部を貼るのはいいが、特に初心者ならちゃんと変数宣言とかも書いてくれ。
あとエラーメッセージもちゃんと書いてくれよ。 エスパー技能を発揮できる人間はそうそういないんだから。

958 名前:デフォルトの名無しさん [2009/06/13(土) 02:23:10 ]
たとえば。

int inputsu(){
int x;
do{ scanf("%d", &x);
} while(x<0 || x>1000);
return x; }

int main(){
int i; int a[10];
for(i = 0; i < 10; i++){
printf("%d個目の整数です。\n", i+1);
a[i]=inputsu(); }
}

959 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:23:43 ]
>>955
isdigitは、あるcharの1字が'0'から'9'までの数字に分類される文字かどうかを判定するだけ。
数値であるかどうかの判定とは違う。

a[i]に値が入るのはsscanf_sの時点。
そのsscanf_sは代入できたデータの数を戻り値にする。見るべきはこれ。

for (i = 0; i < 10; i++) {
    do {
        printf("%d個目の整数です。\n", i + 1);
        fgets(buf, 10, stdin);
    } while (sscanf_s(buf, "%d", &a[i]) != 1);
}

960 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:36:13 ]
>>956
入力後に確認ですか、ありがとうございます。

>>957
すいません、次から気をつけます。
visual C++ 2008EEでやっているのですが、ビルド時にエラーは出ないんです。
コンパイルしたときに
Debug Assertion Failed!
Program:...\Visual Studio 2008\Projects\~

Line: 56
Expression: (unsigned)(c + 1) <= 256

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

っていうメッセージが出ます。

961 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:48:22 ]
>>958
>>959
言われたとおりにやってみたら、
期待したとおりの出力結果が得られました。
ありがとうございます。

962 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:23:58 ]
Webを参考に全ての順列を列挙するプログラムを作ったんですが、
これをnPkが列挙できるように改良するにはどうすれば良いですか
引数を一つ増やして(int k) 終了条件をt.size()==kとしてみましたが
予想よりも多く結果が出力されてしまってうまくいきません

void perm(int p,vector<int>& v,vector<int> t){
if(t.size()==v.size()){
copy(t.begin(),t.end(),ostream_iterator<int>(cout," "));cout<<endl;
}
for(int j=p;j<v.size();++j){
t.push_back(v[j]); perm(p+1,v,t); t.pop_back(); perm(p+1,v,t);
}
}

int main(){
vector<int> v(5),t;
for(int i=0;i<5;++i){v[i]=i;}
perm(0,v,t);
}



963 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:37:58 ]
C言語でマイコンからLCDに文字列を出力するプログラムで

void PutString(char* point);
void PutChar(char data);

main(){
  PutString("Hello,world!");
}

void PutString(char* point){
  while(*point){
  PutChar(*point);
  ++point;
  }
}

void PutChar(char data){
  //LCDに1文字出力し、カーソルをインクリメントする
}

上記のプログラムが正常に動くのですが
PutString("Hello,world!");
文字列のリテラルとchar型ポインタは型があわないはずなのに
なぜこの行がエラーにならず正常に動のでしょうか?
マイコンというよりCの言語仕様の話だと考えたのでこっちに質問しました。

964 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:42:06 ]
俺も最近マイコンのプログラムに触れて思ったけど、
マイコン向けのコンパイラってANSIとかに厳密に追従してない感じだな

ところどころ気持ち悪い

965 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:47:46 ]
標準出力? 何ソレ? みたいな環境もあるからな。
それはしゃーない。

966 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:05:57 ]
>>963
"Hello,world"はchar[12]型。
それが配列からポインタへの変換でchar*になる。
型の問題はどこにもないぞ。

967 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:15:59 ]
ヒント:リテラル

968 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:23:34 ]
え?文字列リテラルは書き換えできなくてもchar*に変換できるだろ。

969 名前:963 mailto:sage [2009/06/13(土) 15:52:05 ]
>>964-968
アドバイスサンクスです。

関数コール時に一時的にメインメモリ上にchar[12]の領域が確保され
そのポインタが渡され、型の問題が生じない。という理解で良いですか。

char[12]が一時的に確保されたなら、その領域が解放されるのは
PutString("Hello,world!");
を抜けた時でしょうか。

970 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:12:22 ]
いいや、一時的な領域が作られることはないよ。
基本的に、文字列リテラルは予め用意された静的な領域に置かれるが、
そこへのポインタそのものがPutStringの引数として渡される。

971 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:20:01 ]
型安全についてCよりも厳しくなったC++では
この変換を「死の変換」と呼ぶ。

972 名前:963 mailto:sage [2009/06/13(土) 16:26:04 ]
>予め用意された静的な領域に置かれる
納得しました。

>>971
「死の変換」ですか・・・
関数から抜けた後は、その文字列リテラルへのポインタがわからなくなり
永遠にアクセスできない領域になってしまうためそう呼ばれるのでしょうか。

char hello[12] = "hello,world!"
と最初のほうに書いておき、
PutString(hello);
とやるほうが望ましいでしょうか。



973 名前:デフォルトの名無しさん [2009/06/13(土) 16:28:43 ]
C++でnamespaceの名前つけかたのルールみたいなものってあるんですか?
Javaだと全部小文字でドメイン名をひっくり返したものとか、あるけど。

大文字で始まってるのよく見る気もするし。
ドットが入ってるのあんまり見ないし

ドメイン名っていうのはかぶらないのでいい方法だと思うけど
yahoo.co.jpだったらどんなのつけます?

974 名前:デフォルトの名無しさん [2009/06/13(土) 16:31:59 ]
そういうのは、プロジェクトポリシーで決まるんじゃねーの

975 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:36:10 ]
>>972
いや、それよりもPutStringの引数にconstつけろよ。

976 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:40:57 ]
>>973
全世界にソース公開とかじゃない限り「絶対にかぶらない名前をつける」ってのは
重視しなくていいんじゃないかな。
ちなみに、自分はクラス名と同じ命名規則。

977 名前:デフォルトの名無しさん [2009/06/13(土) 16:44:55 ]
プログラムのわかりやすさではstringだな。
生成と動作のコストがかかるが。


978 名前:デフォルトの名無しさん [2009/06/13(土) 16:52:01 ]
長い文字列、データをソース内に貼り付けるとコンパイル時間かかりサイズもでかくなる。
計算や短い文から生成できるならそれ使うべき。

979 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 17:29:48 ]
日本語の識別子を使う人なんてめったにいないだろうから
namespaceで日本語を使えば被る確立はほとんどないだろう
コンパイラ依存だけど

980 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 17:57:37 ]
>>979
どう考えたって、
仕様違反のコンパイラ依存に確実になるくらいなら
namespaceがかぶる危険があるってだけの方が
まだマシだと考えるヤツが大半だと思うが。

ローマ字に止めるべし。

981 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:01:00 ]
和製英語のローマ字読み最強

982 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:19:57 ]
BOOL bBlockConnect(char * pAddr, int iPort, unsigned int uiMsg);
int iOnSocketEvent(WPARAM wParam, LPARAM lParam);
BOOL bInitBufferSize(DWORD dwBufferSize);
XSocket(HWND hWnd, int iBlockLimit);
virtual ~XSocket();

int m_WSAErr;
BOOL m_bIsAvailable;
BOOL m_bIsWriteEnabled;

void _CloseConn();

int _iSendUnsentData();
int _iRegisterUnsentData(char * cData, int iSize);
int _iSend(char * cData, int iSize, BOOL bSaveFlag);
int _iSend_ForInternalUse(char * cData, int iSize);

メンバ関数の 始まりの文字が
b -> return BOOL
i -> return int
と規則的に作られてるのですが
_ (アンダーバー)で始まるのは何の意味があるのでしょうか?



983 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:24:17 ]
実装した奴が、そうしたかったから
言語仕様での意味はないはず。


984 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:39:53 ]
privateなメンバとか。何か規則があると思う。
スコープがクラスだから、_[a-Z]+()なメンバ関数があっても他のスコープと識別子がかぶることはないが、
_[a-Z]+で始まる識別子は予約されているので、マクロで置き換えられたときに嵌まるおそれがある。

985 名前:デフォルトの名無しさん [2009/06/13(土) 19:00:49 ]
STLのmapの容量はかってみた。 
<int,int>で2の21乗個登録したら、127M使用していた。
一個あたり、64バイト。
通常の配列だと4バイト、16倍も消費量が多い。
もっと少なくなるやつある?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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