1 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:21:26.11 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.76【環境依存OK hibari.2ch.net/test/read.cgi/tech/1312621728/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
452 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:45:54.75 ] intrusive_weak_ptrはなぜないんだろう なんか作るのに難しい所があるのかな
453 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:33:08.96 ] 簡単だと思うんならやってみればいいんじゃね?
454 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:36:26.76 ] クラスの静的メンバ関数って静的メンバ以外を引数にするのはNGですか?
455 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:41:25.59 ] >>454 問題無いですよ。
456 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 17:50:14.19 ] >>452 weak_ptr機能を導入すると実行コストがshared_ptrと大差なくなると思われ
457 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 19:49:04.54 ] VTableのサイズをするにはどうすれば?
458 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:12:22.34 ] サイズをする?
459 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:15:33.66 ] 知るですすいません
460 名前:デフォルトの名無しさん [2012/01/15(日) 22:39:15.44 ] 2ちゃんとかでよくみるAAをprintfで表示したいのですがどうすればいいでしょうか? メールで提出するので何かをダウンロードしたりしないでプログラムの中だけでやりたいです。
461 名前:デフォルトの名無しさん [2012/01/15(日) 22:40:25.34 ] >>460 すみません、フォントをMS Pゴシックに変える方法が知りたいです。
462 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 22:43:00.46 ] windows コンソール フォント
463 名前:デフォルトの名無しさん [2012/01/16(月) 00:35:53.28 ] vba用のdllをつくっています。C初心者です。 値をdllに渡して処理したあと、グローバル変数に値を入れておいて、 vbaから読み込みのフラグが立ったらその変数を戻すようにしているのですが、 グローバル変数は呼び出し速度が遅い等ネットで見かけます。 グローバル変数を回避して、ローカル変数のみで同様のことをするには ざっくりどんなことをすればいいのでしょうか
464 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 00:38:14.88 ] グローバル変数が遅いなんて初めて聞いたぞ どこだその糞サイトは
465 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 01:50:55.97 ] >>463 > グローバル変数は呼び出し速度が遅い等ネットで見かけます。 どういう理由で何の処理が遅くなるのかがあやふやなので、 まずはそのことがどこに書かれているか教えてください。
466 名前:デフォルトの名無しさん [2012/01/16(月) 02:05:19.02 ] class window {
467 名前:デフォルトの名無しさん [2012/01/16(月) 02:05:50.03 ] すいません誤爆しました
468 名前:デフォルトの名無しさん [2012/01/16(月) 02:08:26.73 ] class window {
469 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 02:12:55.51 ] };}; class window’ has the same name as the class in which it is declared
470 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 10:44:06.68 ] >>464 排他処理のこと言ってるんじゃね?
471 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:25:02.57 ] テンプレート関数について教えてください。 テンプレート関数に部分特殊化はないと思っていたのですが 以下のように書いたらよくわからなくなってきました。 //上になにもテンプレート宣言がないときは<>が構文エラー //template<typename T, typename U, typename V> void f<>(T, U, V){} //通常のテンプレート関数 template<typename T, typename U> void f(T, U){} //テンプレートの特殊化は問題なし? template<> void f<>(int, int){} //この構文は何? 既に本体を持っています。上のがなければok //void f<>(int, int){} //同じ引数の別のオーバーロードは問題なし? void f(int, int){} //テンプレートの部分特殊化のつもりの文 template<typename T, typename U> void f<>(T*, U){} //同じ引数の別のオーバーロードのつもりの文。関数テンプレートは既に定義されています //template<typename T, typename U> void f(T*, U){} //別のオーバーロードなのにtemplateの部分特殊化のように書ける? template<typename T> void f<>(T*){} 上の文のおかしなところをご指摘いただけないでしょうか。 VC2010です。
472 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:25:36.02 ] そもそもそのグローバル変数は何のために使っているんだろう。
473 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:47:37.53 ] >>471 > //テンプレートの部分特殊化のつもりの文 > template<typename T, typename U> void f<>(T*, U){} いいえ、それは部分特殊化ではありません。
474 名前:471 mailto:sage [2012/01/16(月) 12:30:28.34 ] やはりそうですか。 だとすると<>があるとないとでは、どのように違うのですか?
475 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 13:05:46.91 ] >>474 無意味で違いがない
476 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 13:35:20.11 ] ありがとうございました。
477 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 16:00:34.59 ] math.hのsin()を使う場合と、 float fsin = 0; _asm{FLD DWORD PTR DS:[fsin] FSIN FSTP DWORD PTR DS:[fsin]} を使う場合では、どちらが高速ですか?
478 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:18:33.69 ] レスを待つ時間あるなら、自分で計測すりゃいいだろ
479 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:46:29.15 ] 自分で計測したとして その結果は他の環境でも 当てはまりますか?
480 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:48:54.93 ] >>477 ライブラリのバージョンだとかCPUやチップセットの種類だとか様々な環境の違いで変わること。
481 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:49:12.23 ] そういう速度議論なんかはlibc開発者達の間でとっくに終わってる事なんだよね 一人の浅知恵が勝てるわけがない
482 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:54:55.30 ] >>481 いや、勝てる。 libcはいかなる環境のいかなる使い方でも最悪の速度が悪化しないことが求められる。 自作は勝手に条件絞ってその条件の範囲内でのベンチマーク最速を目指せる。
483 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:55:58.80 ] だからといってfsinでは勝てんがな
484 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:58:18.15 ] >>482 こういうことを言う奴に限ってクソみたいなもんを作る
485 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:01:54.85 ] 数学関数の作り直しで勝つとしたら、周辺処理との絡み方を良くして ループ展開、call削減、分岐削減、キャッシュヒット向上とか
486 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:04:20.74 ] >>484 ベンチマーク最速を目指すために書きまくる人vs理論で必死に否定する人
487 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:08:00.77 ] 複数の方法を用意してベンチマークを比べて速い方を選ぶ。それを幾度も繰り返し。 速度問題で勝ちたきゃそれしかねーよ。
488 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:18:11.99 ] >>477 これはsqrtの例だけど、こんな感じで検証して、できれば記事を投稿しろ。 www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspx
489 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:19:55.69 ] あと、SSEが使える環境なら、FPU命令を使うよりSSEで関数を組んだほうが速い。 gruntthepeon.free.fr/ssemath/
490 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:25:56.78 ] zebra, john, gmpのソースを見て思った。 最高の速度を追求するときは標準関数には頼らない。
491 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:14:30.29 ] class Hoge { int mHoge; virtual void hoge(void) = 0; void test(int Num) { mHoge = Num; } }; みたいな抽象クラスを継承するHugaというクラスのインスタンスを作った時、 関数testの実体はインスタンスの数だけ存在するのでしょうか?
492 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:16:15.94 ] しません
493 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:19:11.75 ] しない
494 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:20:15.86 ] そうなんですね。意外ですmHogeはインスタンスの数だけあるのでしょうか?
495 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:20:17.72 ] 関数は常に一つ!
496 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:32.80 ] クラスってそういうもんなんですね。
497 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:33.44 ] 491さんではないですが、知らなかった 一つにするときはstaticを使うもんだと思ってました
498 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:33.96 ] >>494 なかったら困るだろ
499 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 13:42:53.62 ] IEのインターネット一時ファイルを弄ろうとしているのですが、 普通の方法(↓)ではアクセスできないみたいなんです。 fopen( "C:/.../Temporary Internet Files/sample.jpg", "r" ) 戻り値:null 何か特別な処理が必要なんでしょうか?
500 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 13:52:28.98 ] 馬鹿には無理
501 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 14:07:00.59 ] IEのキャッシュを扱うには専用のAPIを使う必要がある。 GetUrlCacheEntryInfoEx とか。
502 名前:499 mailto:sage [2012/01/19(木) 14:17:04.90 ] すみません。自己解決しました。 IEのインターネット一時ファイルの実体(?)って "/Temporary Internet Files/Content.IE5/"の更に下にあるんですね。 エクスプローラーではTemporary Internet Filesの直下にファイルがあるように見えたんですが、 コマンドプロンプトで見て気づきました。
503 名前:499 mailto:sage [2012/01/19(木) 14:19:27.28 ] >>501 さん 情報ありがとうございます。 GetUrlCacheEntryInfoExで調べてみます!
504 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 01:56:49.32 ] char hoge[10]; int len = strlen(hoge); これってlenに9が返ってくるとは思わないほうがいいですか? 帰ってこないとしたらどう初期化すべきですか?
505 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:00:01.82 ] int len = (sizeof(hoge) / sizeof(hoge[0])) - 1;
506 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:40:25.88 ] 9がほしいなら char hoge[10]; int len = sizeof(hoge)-1; でおk
507 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:50:14.66 ] 特に決まった初期化の方法はない感じですかね? ともあれレスありがとうございます
508 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 07:56:40.51 ] >>504 初期化したいのなら、hoge[0] = '\0';で。
509 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 08:09:46.09 ] >>504 char hoge[10] = {}; で。
510 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 09:55:24.58 ] hoge[0] = '\0'ってヌル文字でしたっけ するとstrlen(hoge) で0になっちゃいませんか? >>509 これはどういう動作になるんでしょうか? strlen(hoge)が9に約束されます?
511 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:12:30.97 ] template <unsigned int N> void init(char (&)[N]) { for(unsigned int i = 0 ; i < N - 1 ; ++i) a[i] = 1; a[N - 1] = 0 ; } char a[10] ; init(a) ; cout << strlen(a) << endl ;
512 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:24:30.57 ] >>510 ??? hogeに何が入っているかに因るから strlen(hoge)が保証される分けない。 strcpy(hoge, "a"); ってやった後に strlen(hoge); ってすればstrlen(hoge);は1であることが保証されるけど、 strcpy(hoge, "abcdefghi"); の後に strlen(hoge);ならstrlen(hoge);が9であることが保証される。 hogeの定義により確保したmemoryの大きさを保証したいのなら >>506 の言うとおりsizeof(hoge)とする以外にないよ。
513 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:53:05.54 ] やはりそういういうことですよね >>511 参考にさせて頂きます
514 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:07:59.47 ] 配列の長さと文字列の長さを混同しないようにな。 strlenはたんに'\0'の前までの数を数えているだけなのだから。
515 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:09:49.37 ] 配列に格納できる最大長が欲しいのか。 それならそうと最初からそう言えと。
516 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:10:16.96 ] char hoge[] = "123456789";
517 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 13:00:26.21 ] コンパイル時に決定される配列の大きさを実行時に求めたいという要求が理解出来ない
518 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 10:41:15.47 ] コンパイル時に決定されるかどうかは関係なく、 ポインタから配列の大きさを求めることは出来るのか?という疑問です もっと言えば、関数にポインタだけ渡しておけば、あとは勝手にサイズも見てもらって処理するような処理は可能か?ということです 上では一応sizeof使えとのことでしたが、ポインタの渡し方によっては ポインタそのもののサイズを返したりするので、結局素直に初期化する関数を作るべきかなあ
519 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:05:15.29 ] >>518 vector使えでFA
520 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:05:33.02 ] vector渡せばいい
521 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:10:22.47 ] サイズ付きの構造体、クラスでPK
522 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:42:01.82 ] > ポインタから配列の大きさを求めることは出来るのか?という疑問です これを書こうよ。。。 答え:できない
523 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:45:38.89 ] すいません、疑問がうまく文章になるまで時間がかかりまして。 vector考えてみます
524 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 12:59:38.80 ] // func.cpp namespace { template <unsigned int R> inline BigInt Factor(BigInt const & n) { return n == 0 ? 1 : n * Factor<R - 1>(n - 1); } template <> inline BigInt Factor<0>(BigInt const & n) { return n == 0 ? 1 : n * Factor<256>(n - 1); } } BigInt factor(BigInt const & n) { return Factor<256>(n) ; } // func.hpp BigInt factor(BigInt const & n); こんな感じのコードを見かけたんですけどこのテンプレートになにか意味あるんですか?
525 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:14:48.03 ] >>524 どこら辺を意味がないと思ったの。
526 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:49:19.71 ] >>525 なんで普通に再帰しないのかなーって
527 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:51:40.62 ] >>526 再帰の限界の数の回避とかなのかね。
528 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:18:57.37 ] こんなならループのほうがよさそうに思えるが
529 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:49:56.34 ] test
530 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 16:48:29.11 ] >>528 テンプレートでコンパイル時に計算させようとすると再起しかないんじゃないの。
531 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:21:33.84 ] >>530 そういう意味じゃないとおもう
532 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:53:13.43 ] テンプレート関数を特殊化したり、 テンプレート引数の代わりに関数引数で再帰している よくわからないコード
533 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:53:29.35 ] >>528 コンパイル時定数として階乗の結果が欲しいのをループじゃ対応できないのでは?
534 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 18:03:02.90 ] 問題は、100やそこらの再帰じゃ済まない階乗の値をBigIntで持つ必要が本当にあるのかどうか。
535 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 18:26:06.14 ] inline展開されてオーバーヘッドが無くなるというメリットはありそうだがこのサンプルでは無意味だろうな
536 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 20:12:08.33 ] >>535 コンパイル時に計算されるからインラインに展開してオーバーヘッドがなくなるとか関係ないのでは?
537 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 21:30:45.28 ] >>530 ,533,536 それはもしかしてこんなコードじゃないのかい ttp://codepad.org/t8ejWQ2g
538 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 10:01:51.79 ] 質問です。 template <typename T = char> class Hoge { }; void test(void) { Hoge h; } テンプレート引数 T に対して char を与えてやってるので、 Hoge を使用する際、テンプレート引数を与えなくてもよさそうなのに、 error C2955: 'Hoge' : クラス テンプレート を使用するには テンプレート 引数リストが必要です となります。どうしてですか? どうぞよろしくお願いします。 VS2008 pro Win7 pro x64
539 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 10:03:11.96 ] Hoge<> hoge;
540 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:31:02.17 ] つまり、class Hogeとtemplate<>class Hogeの区別がつかないんだな。
541 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:49:44.40 ] GPU計算に興味が有るんだけど、C++だとOpenCLってやつが一般的? C++で使えて入門に向いてるのって何があるかな?
542 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:53:37.64 ] 下記関数は5ms周期で実行されています。 CTMAXが200を超えたとき、例えば201に なったとき、10ms周期の処理が5ms後に実行 されるという現象がおきます。 下記のように毎回実行される5msの処理は仕方 ありませんが、10ms以降の処理は実行タイミング がかぶらないようになっています。この状態でさ らに実行タイミングがずれないような処理を作りた いのですが、思いつきません。できるものでしょうか? void time(void){ #define CTMAX 200 static int ct; if(++ct > CTMAX) ct = 0; func5ms();/* 5ms処理 */ if(ct & 0x01) == 0) func10ms(); else{ if(ct & 0x02) != 0) func20ms(); else{ switch (ct){ case 1: case 21: case 41: case 61: case 81: case 101: case 121: case 141: case 161: case 181: func100ms(); break; case 13: case 53: case 93: case 133: case 173: func200ms(); break; case 5: case 105: func500ms(); break; case 9: func1s(); break; }}}}
543 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:12:36.72 ] よく分からんけど、 s = milisecond(); do_something(); e = milisecond(); if(e-s<200)) sleep_milisecond(200-(e-s)); ぐらい?
544 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:24:07.29 ] とりあえずこういうこと? ctって0〜200までの値、つまり 201個の値を取ることになっていたんだけど、 そこがまず問題だよね。 1005ms が 1000ms と等しいよ。 本当ならば、>= としなければならないよね? // if(++ct >= CTMAX) ct = 0; or ct++; ct %= CTMAX;
545 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:34:49.47 ] void time(void) { #define CTMAX 200 static int ct = 0; // 0 <= ct <= 199 ct %= CTMAX; mod_10 = ct % 10; mod_100 = ct % 100; mod_200 = ct % 200; mod_500 = ct % 500; if(!mod_500) func500ms(); if(!mod_200) func200ms(); if(!mod_100) func100ms(); if(!mod_10) func10ms(); ct++; }
546 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 13:52:36.91 ] 素直に書いた方がoptimize有利なんだから ct = (ct + 1) % CT_MAX;
547 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:01:39.16 ] time()を初めて実行した時に困るでしょ。 ct = 1;で実行することになって起動後9ms, 19ms, 29ms, ... で実行することになるよ。 人が書いたコードにbug入れる奴っているんだよな 迷惑なんだよな
548 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:06:09.81 ] そもそも標準関数と同じ名前の関数を作るな間抜け。
549 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:10:55.35 ] これって組み込みだから問題ないと思って特に指摘しなかったよ。 time.hなんて高尚なヘッダは存在しないんじゃないの?
550 名前:538 mailto:sage [2012/01/24(火) 16:33:33.09 ] >>539 ありがとうございます。助かりました。
551 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 07:51:50.37 ] 結局>>542 はどうなった? 自分は解決したから後はシーラないってか?
552 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:36:12.44 ] >>544 さんのいうとおり++ct >= CTMAXとしただけでとりあえず 自分の作ったやつでも正常に動くっぽいですね。 ちなみに関数名にtimeなんて使ってません。書き込むとき 面倒なんで簡単な名前に変更しただけです。 >>545 のプログラムはわかりやすいですが、0のとき全部実行され てしまうのが難ですね。 それからmod_10で考えると10回に1回しか起動しないので、 それだと10msじゃなくて50ms周期になってしまいます。