- 1 名前:デフォルトの名無しさん [2009/07/18(土) 02:54:58 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part70 pc12.2ch.net/test/read.cgi/tech/1244942050/l50
- 847 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:31:11 ]
- 別に両方書いても、片方が仕事してもう片方が潰されるだけのこと
ライブラリ屋は「VC++なら#pragma onceが先に掛かるようにした方が軽いな」とか 有効な順番を意識するが、別にしなくてもコンパイルが僅かに遅いとかその程度
- 848 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:35:54 ]
- >>844
問題ない。実際Boostの一部のヘッダではVCの場合に併用している。 >>842によるとWin32 APIのヘッダでも同様のことをやってるようだし。
- 849 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:42:13 ]
- 仕様として #include と書けば何度でもファイルを開いて展開するんだろうけど
その仕様が役に立つことってあるの?
- 850 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:50:48 ]
- >>849 assert.h を #define NDEBUG して #include したり #under NDEBUG して #include したり。
- 851 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:51:29 ]
- Boost.Preprocessorを使った再帰#includeでVariadic Template
みたいなことをするテクニックとか…
- 852 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:01:04 ]
- #ifndef HOGE_H
#define HOGE_H #if defined(_MSC_VER) && defined(__GNUC__) && ... #pragma once #endif 本文 #endif 結局こうするのがベストなのか めんどくせーな
- 853 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:04:36 ]
- >>852
それじゃどんなコンパイラでも#pragma onceが使われないぞw
- 854 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:17:23 ]
- いや、
VC++でコンパイルする時に -D__GNUC__ -D__BORLANDC__ をオプションにつける GCCでコンパイルする時に -D_MSC_VER -D__BORLANDC__ をオプションにつける という技を駆使しろ、という>>852のお告げ。
- 855 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:30:44 ]
- >>852
#if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif これだけでいい。併用は単にコンパイル時間の高速化の意味しか無いから、違いの出る VC++だけ書けば十分。 >>853 この書き方でちゃんと使われる。 ちなみに>>847は半分間違い。>>852で両方とも有効に働く。
- 856 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:31:13 ]
- 凄いな神の技だ・・
- 857 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:38:44 ]
- >>855
> この書き方でちゃんと使われる。 アホ? &&の意味も分からないのか?
- 858 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:43:12 ]
- >>855
使われねぇよw
- 859 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 05:24:50 ]
- >>855
#pragma once は、VC++4.2(_MSC_VER=1020)からサポートされたと考えていい?
- 860 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 05:47:27 ]
- 1000にしてるライブラリもある
1020にしてるライブラリもある
- 861 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 21:36:23 ]
- STL でつまづいています。
codepad.org/KNe3UsXV lst1.merge(lst2) でマージだけでなくソートされてしまうのはどうしてでしょうか?
- 862 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 21:41:10 ]
- なぜならmergeというのはマージソートでいうところのマージを行う関数だからです
- 863 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:12:32 ]
- こじつけ気味に言うとjoinでなくmergeだから。プログラム関連ではだいたい以下のニュアンス。
join:二つのものをつなげて一つにする。繋ぎ目で切り離せば元の二つに戻る。 merge:二つのものを混ぜて一つにする。元の二つに戻すには構成要素を一つずつより分ける必要がある。
- 864 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:01:23 ]
- >>861
しっかりドキュメント読め。 lst1.merge(lst2)はソートする。O(n) lst1.splice(lst2)はソートしない。O(1) >>863も書いているけど、mergeはどちらかと言うと順序関係を保存して結合する という意味合いが強いね。順序関係を作るためにソートが必要になるということ だと思う。
|

|