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


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

C++相談室 part71



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はどちらかと言うと順序関係を保存して結合する
という意味合いが強いね。順序関係を作るためにソートが必要になるということ
だと思う。






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

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

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