- 1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 684 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:48:29 ]
- >>682
newしてdeleteしない習慣がついてます、サーセンwww。 vectorとかshared_ptrがないと生きていけません。
- 685 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:49:11 ]
- お前に教えるのが面倒くさいわ。
- 686 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:49:20 ]
- きみのところの石がPowerPCとかMIPSとかでないなら、
iprt.sin_port=80; は iprt.sin_port=20480; にするといいお
- 687 名前:676 mailto:sage [2008/03/10(月) 20:50:38 ]
- >>684
俺もC++で、ついこないだまで必死でc_str( )使ってた。
- 688 名前:デフォルトの名無しさん [2008/03/10(月) 20:52:26 ]
- newはクラス以外で使うなよ
STLのように自動開放する以外には使うべきでない
- 689 名前:676 mailto:sage [2008/03/10(月) 20:53:06 ]
- >>686
あぁ消したハズなのに普通に代入してたの残ってた。 このことか。ありがとう。 てか20480って怪しいポート何?
- 690 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:54:16 ]
- deleteめんどくさいならnewしなきゃいいって発想はないのかなぁ。
悪くてもこの場合固定長配列でいいし、もっと言えばstringを使うべきところ。 全く意味のないnewじゃん。 newしてdeleteしないのが致命的にならないのはこのサイズのバイナリだからであって、 自動でやるからデリートしなくて良いって考え方は非常に危険。くせにするなって言う意見のがもっとも。 たとえば、photoshopみたいなソフトを作ってる人がnewしてdeleteしなかったらどうなるか。
- 691 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:54:40 ]
- はい、GCを導入します
- 692 名前:676 mailto:sage [2008/03/10(月) 20:59:43 ]
- >>690
ありがとう。今度からできるだけ意味無いことは止める。 string型にすればいいだろうなぁとは思ってた。 最初mallocにしてたけど、知らん間にnewになった。 そもそもstringならnewはいらんはなしだったけど、そこまで頭回らんかった。 俺の脳裏にはC言語っぽいのをできるだけC++っぽくしようってのがあったんだと思う。 かえってそれが変に見えたのは認める。 勉強になりました。
- 693 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:01:47 ]
- つーか、
・getaddrinfo使えタコが ・面倒だからとエラー処理サボると、もっと面倒な事態に の例
- 694 名前:676 mailto:sage [2008/03/10(月) 21:07:27 ]
- >>693
ネットワーク系に触るの生まれて初めてなのよn getaddrinfoか、メモメモ / ̄ ̄\/) f ヾ | ⊂(゚Д゚)| ヽ _(◎)ノ ノつ /ノ/ ハヽ二二ノ ( (||i) )ヽ\ ヽ)L人(_/(ノ`J
- 695 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:30:06 ]
- >>694
触んないほうがいい。
- 696 名前:676 mailto:sage [2008/03/10(月) 21:42:16 ]
- >>695
NEってCCNAとかのイメージが先行して配線を弄ってるイメージ強かったけど、 プログラム組ませると「間違えると危険なんだなぁ」とは思った。勉強になりました。 安全な下級PGに戻ります。
- 697 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:38:48 ]
- スレがカオス気味でワロタ
- 698 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:10:24 ]
- ここでド素人の俺が颯爽と質問
int型へのポインタの宣言って int *a; int* a; この二つで差がありますか?
- 699 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:13:06 ]
- int* a, b;
- 700 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:13:52 ]
- 若干スレ違い臭いのですが、質問させてください。
コンパイル時、2つのコンパイルオプションを指定したいのですが、どのように書けばいいのでしょうか。 例えば`wx-config --cppflags` と `pkg-config --cflags gtk+-2.0` を同時に使いたいのです。
- 701 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:14:44 ]
- >>698
違いはありません。 しかし、その二つはまれに戦争の火種となります。
- 702 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:19:40 ]
- >>698
int *a, b; int* a, b;
- 703 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:33:51 ]
- >>699,701-702
ありがとうございます intだとint型とint型へのポインタが同時に宣言でき、 int*だとint型へのポインタのみ宣言できるわけですか >戦争の火種 (((( ;゚Д゚))))ガクガクブルブル
- 704 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:39:19 ]
- >>703
いいえ、どちらも同じです
- 705 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:40:40 ]
- >703
戦争の火種って言っても空襲は来ないから安心しておじいちゃん。
- 706 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:47:02 ]
- >>703
残念ながらそれは違う
- 707 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:59:24 ]
- int *a, b;
int* a, b; 二つとも aがint型へのポインタ。int型の変数bでしょうか?
- 708 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:02:17 ]
- Yes.
int* a, b; と書こうが、b はポインタにはならない。
- 709 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:02:58 ]
- >>707
その通り
- 710 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:05:39 ]
- int * a; のように書く人もいるね。
- 711 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:07:17 ]
- >>700
単に並べればいいよ。 gcc `wx-config --cppflags` `pkg-config --cflags gtk+-2.0` mycode.cc
- 712 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:08:06 ]
- int*a; 派
- 713 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:09:31 ]
- おまえがどう書こうが関係ねえ
- 714 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:10:33 ]
- int
* a ; 派
- 715 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:11:23 ]
- >>714
ステップ数至上主義者ですね
- 716 名前:700 mailto:sage [2008/03/11(火) 00:17:01 ]
- >>711 さん
ありがとうございます!
- 717 名前:デフォルトの名無しさん [2008/03/11(火) 00:34:27 ]
- i\
n\ t * a ; 派
- 718 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:37:59 ]
- boost::mpl::identity<int*>::type a;派
- 719 名前:デフォルトの名無しさん [2008/03/11(火) 01:21:53 ]
- string の読み込みがないのが不便ですね
改行やバリナリはありますが 自作するしかないですか
- 720 名前:デフォルトの名無しさん [2008/03/11(火) 01:24:21 ]
- C言語やWindowsAPIはファイルの入出力が低レベルのしか無いです
たとえば空きメモリを調べてバッファを使って出力するとか そういうのを強化するライブラリ無いですか ビット単位の出力もないです
- 721 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:25:23 ]
- boostでおk
- 722 名前:デフォルトの名無しさん [2008/03/11(火) 01:27:40 ]
- 詳しく教えてください ライブラリ名とか
- 723 名前:デフォルトの名無しさん [2008/03/11(火) 01:32:21 ]
- 例えば、Fstream というバッファ付きファイル出力クラスを自作したとします
書き込みがあまりなくなったらメモリを解放したいのですが、 一番最後の書き込み時に解放しなかった場合、 それ以降アクセスがなかったら無いことを知ってメモリ解放するにはどうしたらいいですか
- 724 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:33:05 ]
- デストラクタで開放するようにして、スマートポインタに入れるなりなんなり
- 725 名前:デフォルトの名無しさん [2008/03/11(火) 01:34:41 ]
- クラス生成時にサブスレッドを動かして
時間計測してシグナル出せば良さそうですね
- 726 名前:デフォルトの名無しさん [2008/03/11(火) 01:37:56 ]
- >>724
複数のファイルを同時に扱いたいです 1000個の書き込みがあれば 一つあたり100KB確保でも大きいです 単独でバッファ管理するより複数を調べた方が良さそうですが
- 727 名前:デフォルトの名無しさん [2008/03/11(火) 01:43:50 ]
- 例えば
Fstream fp("out1"), fq("out2"); としたとします クラスはfpの状態とfqの状態両方を知ることは出来ますか
- 728 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:51:55 ]
- static変数ででも管理すればいいだろ
- 729 名前:デフォルトの名無しさん [2008/03/11(火) 01:57:24 ]
- fp[100]としたとき、メモリを解放した方が良い番号がわかったとき自動的に
解放させるにはどうしたらいいですか? 最近参照された時間を保持していてもメンバ関数からでは 他のメンバ変数はわからないですよね
- 730 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:58:38 ]
- >>729
728読んだ?
- 731 名前:デフォルトの名無しさん [2008/03/11(火) 01:59:49 ]
- staticは共用されないですか?
個別の時間を保持しないと駄目ですが
- 732 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:01:30 ]
- 全インスタンスの個別の時間を保持するlistかmapかなんかをstatic変数にすればいいだろう
- 733 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:02:00 ]
- だいたい貴様の知識が乏しいのは自分でもわかってるんだろ。
その貧相な知識で勝手に判断して人のレスを無視するんじゃねえよ
- 734 名前:デフォルトの名無しさん [2008/03/11(火) 02:03:54 ]
- 時間管理もバッファも、vector型にして共用すれば良いですか?
- 735 名前:デフォルトの名無しさん [2008/03/11(火) 02:09:53 ]
- あとメモリ解放のためにサブスレッドを動かしたいのですが
コンストラクタに入れるとクラス生成ごとに呼びだれると思うのですが これも共用するにはどうすればいいですか? static fnc(){}などと書けば初めの一回だけになりますか
- 736 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:10:01 ]
- 質問する前に手を動かしてみたら?
- 737 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:15:17 ]
- 闇雲に手を動かすだけで、「〜をやってみましたがうまくいきませんでした。なぜですか。」とか聞いてきそうだ。
>static fnc(){}などと書けば初めの一回だけになりますか staticというキーワードを知っているのなら、それについての最低限の仕様くらいは 自分で調べたほうがいいよ。webを見るなり、まともな入門書を読むなりして。 凝ったことをやろうとする前に、もっと先に学ぶべきことが多そうだ。
- 738 名前:デフォルトの名無しさん [2008/03/11(火) 02:28:02 ]
- うごかないですが原因がわかりません
どうすればいいですか class cls{ public: static int n; cls(){ n=0; } }; main(){ cls x; }
- 739 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:32:52 ]
- どううごかないんだ
コンパイルエラーなのか 画面に何も表示されないのか 後者なら別におかしくないぞ
- 740 名前:デフォルトの名無しさん [2008/03/11(火) 02:37:50 ]
- Error: 未解決の外部参照 'cls::n' がTEST.OBJ から参照されました
とでます
- 741 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:39:42 ]
- static変数の定義がないから
static int cls::n;
- 742 名前:デフォルトの名無しさん [2008/03/11(火) 02:42:55 ]
- それは知りませんでした サンクス
あとクラスのメンバ関数も共用出来ますか? 初めに一度コンストラクタで起動するだけにしたいです
- 743 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:44:44 ]
- >>742
staticをメンバ 関数につけたらどうなるか調べなおせ
- 744 名前:デフォルトの名無しさん [2008/03/11(火) 02:56:22 ]
- 他人のコードを読んでいて、
namespace std { template <> void swap(hoge &a) みたいな記述があったのですが、templateのあとの<>の中が空白でも コンパイル出来ているのですが、なんででしょうか?
- 745 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:57:24 ]
- パラメータ0個のテンプレート
- 746 名前:デフォルトの名無しさん [2008/03/11(火) 03:01:30 ]
- >>745
ありがとうございます。でも意味がないような、、、 どんな時につかうのですか?
- 747 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 03:06:02 ]
- 特殊化でぐぐれ
- 748 名前:デフォルトの名無しさん [2008/03/11(火) 03:11:47 ]
- read(fp, x)
write(fq,x) としたとき、読み込むファイルが1G以上だとメモリがたらなくなります あらかじめ書き込むサイズが判明していたとしてマルチスレッド化して read(fp, x) write(fq, x, N, KAIHOUFLG) としてメモリを解放しながら読み書きするにはどのように実装すればいいですか
- 749 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 03:15:09 ]
- マルチスレッドに何の関係があるんだよ。
分割して読み書きすればいいだけだろうが
- 750 名前:デフォルトの名無しさん [2008/03/11(火) 03:17:02 ]
- read(fp, x)はファイルを読み込みますが、例えば1G読み切るまで停止しないって事です
- 751 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 03:19:17 ]
- それはそのreadの設計が悪いだけだろうが。
- 752 名前:デフォルトの名無しさん [2008/03/11(火) 03:20:49 ]
- >>747
ありがとうです。特殊化でぐぐったら、wikipediaのエントリが先頭に出てきて、それを 読んだらわかりました。(わかりやすく書いてあった) templateのうち、コンパイラまかせじゃなくて自分で書いてしまいたいところを自分で 書くということですね。
- 753 名前:デフォルトの名無しさん [2008/03/11(火) 03:21:11 ]
- 1Gのファイルを読み込んだとして、
メモリを解放しながら書き込むという指定をすると 読み込まれた部分に対して先頭からメモリを解放しながら書き込みます
- 754 名前:デフォルトの名無しさん [2008/03/11(火) 03:23:27 ]
- 通常使用では一括して読み込むことも出来るし、
メモリを解放させながら読み込むことも出来るという汎用の関数を作りたいんです
- 755 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 03:25:35 ]
- なら作ってください
- 756 名前:デフォルトの名無しさん [2008/03/11(火) 03:26:09 ]
- やり方を教えてください
- 757 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 03:30:19 ]
- 上で散々でてるがな。
- 758 名前:デフォルトの名無しさん [2008/03/11(火) 03:30:20 ]
- 商品先物や、為替取引と同じようなものです
現物を扱わずに売り買いだけを先にしてしまうようなものです 読み込みと書き込みの約束だけをしてしまい不要ならメモリを解放します
- 759 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 04:31:06 ]
- 口約束で終わるって事か?
- 760 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 06:03:12 ]
- スレが伸びてると思ったら、梯子もなしに屋上に上ろうとする馬鹿が沸いてたか。
- 761 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 07:20:30 ]
- VirtualAllocでCOMMITを調整する話か?
まー、32bitアプリは仮想メモリ空間も 2Gあたりでリミットだからあんまし意味がないけど
- 762 名前:デフォルトの名無しさん [2008/03/11(火) 07:20:53 ]
- >>756
- 763 名前:デフォルトの名無しさん [2008/03/11(火) 07:23:38 ]
- >>756
Windowsなら4つのAPIで実現できる。 APIの頭文字はそれぞれ、C、M、U、Cだ。
- 764 名前:デフォルトの名無しさん [2008/03/11(火) 09:38:41 ]
- 書き込み予約と、読み取り予約と、バッファ管理して
それらを同時に動かして快適動作させたいわけです コードを教えてもらえませんか? 読み書きのバッファを128KB単位にして管理すれば良さそうなんですが・・ x[n]のようにデータにアクセスできるが、前方が解放されていたとしてもそれ以外は同じアクセスが出来るようにしたいです
- 765 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:46:11 ]
- >>764
ディスクを交換するほうが早い。
- 766 名前:デフォルトの名無しさん [2008/03/11(火) 10:36:58 ]
- >>764
脳ミソを交換ry
- 767 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:00:57 ]
- >>764
したい事は >>748 なのか? もしそうなら、標準関数は何もしなくてもそうなってる 一体何のために何がしたい?
- 768 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 13:46:23 ]
- 読み込みや書き込みをできる限りメモリにキャッシュしたい、というこ
となら、組み込み環境でない限り、OSがそれぐらいはやっている。
- 769 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 13:57:28 ]
- そんなこと無いよ
それだったらFFCやfast copyがOS標準のコピーを上回らないはずだよ 一つの巨大ファイルだけを扱うならば、速度差は出ないだろうけど 複数のファイル(1000以上同時など)を扱うと標準のはやつにたたない あと2Kずつ書き込みがあったとしたらそのつどAPIでそのまま書き込んでいたらとても鈍いよ
- 770 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:02:16 ]
- ファイルをメモリにロードする事、複数の少数ずつのファイル出力の最適化する事
上のファイルロードをスレッド化して読み込み中に不要なメモリを解放出来るようにすること
- 771 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:07:58 ]
- まずC言語とWindows APIのファイル入出力は難しいんだよ
Read( "inputfile", buf ); Write( "outputfile" , buf ); だけで扱えるようにしたい しかしここで、バッファ管理やマルチスレッド化を導入しなければ 巨大ファイルを読み込むときにメモリ不足が足らなくなったり、少数ファイルの書き込みで速度低下する これらを解消して簡単なファイル入出力をしたい
- 772 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:10:02 ]
- ファイルマッピングをmemcpyしたまえ
64ビットならアドレス空間も余裕だ
- 773 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:20:24 ]
- >>769
FFCとかはFILE_FLAG_NO_BUFFERINGをつかって システムキャッシュにのせないことで高速化してるんじゃなかったっけ?
- 774 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:28:10 ]
- >>770
目指している方向はわからなくもないが、 ここで色々訊いているような人間が使い物になるものを作れるかどうか不安。 何事も、下手な自作よりOS標準など既存のものほうがずっとうまいと仮定すべき。
- 775 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:33:19 ]
- 読むだけじゃ意味無い(処理するために読む)んだから、
巨大データをオンメモリでっていうこと自体に元々限界があるの。 分けなさい。
- 776 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:49:21 ]
- すみません 出力値が異なるのですが原因がわかりません なぜでしょうか?
#include <iostream> #include <string> using namespace std; #define N 10000000 int main(){ unsigned int n,m,cn[256]; string x(N,'\0'); for(n=0;n<N;n++)x[n]=rand()&255; for(n=0;n<256;n++){cn[n]=0;for(m=0;m<8;m++)cn[n]+=(n>>m)&1;} unsigned int sum=0; for(n=0;n<N;n++)sum+=cn[x[n]]; cout<<sum<<endl; #define b(x,i) ((x>>i)&1) sum=0; for(n=0;n<N;n++){ int y=x[n]; sum+=b(y,0)+b(y,1)+b(y,2)+b(y,3)+b(y,4)+b(y,5)+b(y,6)+b(y,7); } cout<<sum<<endl; }
- 777 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:52:58 ]
- 自己解決しました
string x(N,'\0'); → vector<unsigned char> x(N,0); で一致しました
- 778 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:48:42 ]
- ちょっとお尋ねしたいのですが
コンパイル時 ../source/memo.h:15: note: candidates are: MyFrame::MyFrame() ../source/memo.h:15: note: MyFrame::MyFrame(const MyFrame&) のようなエラーが出たのですが、このエラーはどういう意味のエラーなのでしょうか??
- 779 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 16:52:43 ]
- それ単独では出ないと思うけど・・・
その直前のエラーについての補足説明で、 候補としてこういう関数がありますよってことじゃないかなたぶん?
- 780 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:31:11 ]
- 山ほどあるコンパイラのエラー出力フォーマットなんていちいち覚えてられないよ。
コンパイラ・ソース・エラー(省略せずに)を明記してくれ。
- 781 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:04:38 ]
- >>778
noteって単語と、candidateって単語の意味くらい調べましょうね。 そうすればそれらの行がエラーじゃないことと、何を言わんとしているか位判るだろうから。
- 782 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:06:36 ]
- >>769
>複数のファイル(1000以上同時など)を扱うと標準のはやつにたたない  ̄ ̄ >巨大ファイルを読み込むときにメモリ不足が足らなくなったり、少数ファイルの書き込みで速度低下する  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 落ち着いて、日本語で書いてください。
- 783 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:07:04 ]
- int a[6]={0,1,2,3,4,5,6}
とすると、配列の中身を一気に定められますが、 int a[6] と一度定義した配列に一気に中身を代入することは可能でしょうか
- 784 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:15:55 ]
- >>783
int oneShotArray[] = {0, 1, 2, 3, 4, 5, 6}; int a[6]; std::copy(oneShotArray, oneShotArray + 6, a); memcpy(a, oneShotArray, sizeof(* a) * 6);
|

|