5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part14

1 :デフォルトの名無しさん:02/12/31 18:57
System.out.println("前スレが埋まったので新しく作りました。");
System.out.println("みなさんC++をやりましょう。");
System.out.println("てか突っ込めよ!>>2-1000");

前スレpart13 http://pc3.2ch.net/test/read.cgi/tech/1038031395/
関連スレは前スレを見ましょう。

932 :デフォルトの名無しさん:03/01/26 01:19
されないだろ。つかされたら困る。

933 :デフォルトの名無しさん:03/01/26 01:33
ベンチマークテストでもやってみるべ。
風呂入ってくるから後で。

934 :デフォルトの名無しさん:03/01/26 01:43
>>933
ハァァ?ベンチマークとるまでもないだろ。
理性的に考えれば結果は明白。これだからベンチマーク厨は・・・




とかいう芳しいのが別のスレに居た。

935 :デフォルトの名無しさん:03/01/26 02:09
>>934
まあそう言わずに、どれだけ実際に違うのか見てみましょうよ。

g++3.2.1(MinGW)で以下の関数を QueryPerformanceCounterで測定。

void dummy(const std::string& s)
{
}

void func1()
{
for (int i = 0; i < LOOP; i++)
dummy("test");
}

void func2()
{
std::string s("test");
for (int i = 0; i < LOOP; i++)
dummy(s);
}

936 :デフォルトの名無しさん:03/01/26 02:12
コンパイルオプションは -O3。

LOOP = 500000 で実験。

func1 = 365125
func2 = 1944

ご覧のように、std::stringのコンストラクタを呼んだ方は100倍以上も
遅くなってしまいますた。

-O2だと
func1 = 371604
func2 = 7711

これでも全然遅いです。

937 :デフォルトの名無しさん:03/01/26 02:17
933じゃないけど試してみたよ。

VC7, gcc3ともに毎回コンストラクト/デストラクトしてた。
最適化オプションつけたらvc7は5倍ぐらい速くなったけど、
gcc3は1.2倍程度だった。

stringの生成をループの外に持ってったら、
最適化オプションなしで20倍ぐらい速くなった。

ところで、foo()の中身を、引数のstringの長さをグローバル変数に足しこむ
のにしてたんだけど、
ループ外にもってったのをvc7で最適化したら、ループが無くなってました。
gcc3は残ってた。

938 :937:03/01/26 02:20
書いてるうちに別の方が書き込みを・・・
やってることはほぼ同じです。

939 :デフォルトの名無しさん:03/01/26 02:29
>>937
VC7の方もなかなか速いね。gccは-O3にしたらループは
残るものの、callが無くなっていました。

int len;

void dummy(const std::string& s)
{
len += s.length();
}

でやったら、-O3で

func1 = 379483
func2 = 9185

という結果。これがまあ実際の使用上の差かもしれません。

940 :デフォルトの名無しさん:03/01/26 02:58
enumって何ナノ?定数のtypedef?
継承できないよね?
勝手にできないと思って、拡張するとき
#defineでごまかしてるんだけど。

classにstatic constならべたclassを継承すれば
継承っぽいなぁ。めんどいけど。

詳しい方ご教授ください。

941 :デフォルトの名無しさん:03/01/26 03:11
enumに整数以外の型も使えたらなあ・・・

942 :デフォルトの名無しさん:03/01/26 03:13
>>940
enum は列挙型で、それ自身独立した型。enum から整数には暗黙の変換が
利くけど、整数から enum や異なる enum 間の変換にはキャストが必要。

おそらく

class Foo {
public:
 enum TYPE1 { A, B, C, ... };
 virtual func(TYPE1 t);
};

なんてのがあって enum を拡張したいのだと思うけど、それは設計が腐ってる。

func() の中で t の値で処理を場合分けしていて、かつ t に対して将来の追加が
考えられるなら、処理自体をカプセル化して別のクラスに括り出すことを考えた
方が良い。

class Cmd {
public:
  virtual func(Cmd& foo) = 0;
};
// enum に対応して Cmd の派生クラスを作っておく
// Cmd 派生クラスのインスタンス生成は Factory パターンでも使って下さい

class Foo {
public:
  virtual func(Cmd* cmd);
};


943 :C++厨:03/01/26 13:20
enumeration
【名】《【複】enumerations》
(1)数え上げること; 列挙.
(2)目録, 表 (=list).
 by Roboword

944 :デフォルトの名無しさん:03/01/26 16:16
cygwin 上の g++ で

$ g++ hoge.cpp -I /hogeinc

と書いてコンパイルしてるんですが、この -I /hogeinc を書かなくても
自動的に対象ディレクトリを見てくれるようにするにはどうしたらいいですか?

945 :デフォルトの名無しさん:03/01/26 16:18
知らん。
makefile工夫すれば書くのはめんどくさくないと思うが。

946 :デフォルトの名無しさん:03/01/26 16:19
>>944
specs に書いておく。gcc -v すると specs ファイルのパス名分かるから、あとは
それをエディタで開いて書き換えましょう。

947 :944:03/01/26 16:48
>>945
make 使うまでもないちいさなプログラムのテストとかで面倒くさいんです。

>>946
できましたー!ありがとうございます!!
これは gcc ならどんな環境でも有効な方法なんでしょうか?

948 :デフォルトの名無しさん:03/01/26 18:40
質問があります。
非常に日本語で表しにくいのですが…
ある範囲内の数値でIDを自動的に生成するようなクラスは
どのように実装したらよいでしょうか?
例えば、Get()で新しいIDを、Release(ID)でIDの解放を行うような
ID管理のクラスを作りたいのですが。
最初はstd::vector<bool>を使って使用中か否か管理しようかと
思ったのですが、intの全範囲で使用可能などとなると管理が
できなくなってしまうので…
皆様のご意見をお聞かせください。

949 :デフォルトの名無しさん:03/01/26 18:53
>>948
それしか方法が無いと思うが。
できるのは、容量を縮めるのに bitset を応用できるくらい?

950 :デフォルトの名無しさん:03/01/26 19:08
>>949
Get, Release に特定のパターンがあるなら、最適化する余地はある。たとえば
多くの場合、

 まとめて Get
 まとめて Release

するなら、

 ここから、ここまで確保されている (最小 ID と最大 ID のタプル)

っつーのを持たせた方が良い。

何の前提もつけられないとなると、完全に全範囲持たせるしかないよな…

951 :デフォルトの名無しさん:03/01/26 19:59
>>948
std::set<int>、で、どう?

952 :デフォルトの名無しさん:03/01/26 22:11
>>907
立てるの?立てないの?
■過去スレ■
Part1 http://piza.2ch.net/tech/kako/980/980175292.html
Part2 http://pc.2ch.net/tech/kako/996/996640937.html
Part3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
Part8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
Part9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
Part10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
Part11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
part12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
part13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
part14 http://pc3.2ch.net/test/read.cgi/tech/1041328679/
■関連スレ■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc3.2ch.net/test/read.cgi/tech/1037795348/

STLスレッド     http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
STLスレッド part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html

953 :デフォルトの名無しさん:03/01/27 00:33
class A
{
  A();
}
class B : public A
{
  B();
}
この場合手持ちのコンパイラでは
A::A()が先に実行されるのですが
これは規格で保証されてる事なのでしょうか?

954 :デフォルトの名無しさん:03/01/27 00:34
>>953
保証されてる。デストラクタがその逆であることも。

955 :デフォルトの名無しさん:03/01/27 00:38
>>954
ありがとうございます

956 :デフォルトの名無しさん:03/01/27 02:27
>>928->>939の書き込みに感動しました。
実行時間の測定は、gccというかUNIXの場合timeを使うのですよね。
VCの場合、どうやって測定するのでしょうか。

957 :デフォルトの名無しさん:03/01/27 02:32
>>956
トリッキーなコード2より転載。windows.hをインクルードして呼ぶ。

int prof(void (*func)())
{
__int64 start, end, freq;
HANDLE hprocess;
DWORD oldclass;

hprocess = GetCurrentProcess();
oldclass = GetPriorityClass(hprocess);

Sleep(10);
SetPriorityClass(hprocess, REALTIME_PRIORITY_CLASS);
QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
QueryPerformanceCounter((LARGE_INTEGER*)&start);

func();

QueryPerformanceCounter((LARGE_INTEGER*)&end);
SetPriorityClass(hprocess, oldclass);

return (int)(end - start);
}

958 :デフォルトの名無しさん:03/01/27 02:35
>>949
VC++6では既に, std::vector<bool>は1要素1bitで保持してる(はず)。
激しく環境依存だけど。


959 :デフォルトの名無しさん:03/01/27 03:55
新スレ立てました C++相談室 part15
http://pc3.2ch.net/test/read.cgi/tech/1043605481/

960 :デフォルトの名無しさん:03/01/27 04:01
足りないと思われるものがあるなら今のうちに次スレの
方に貼り付けておいてください。今日はもう寝ます、お休みなさい。

961 :デフォルトの名無しさん:03/01/27 06:12
漏れの脳みそは足りないと思うのですが、何を貼り付ければいいですか?

962 :デフォルトの名無しさん:03/01/27 07:33
汝には、当家に伝わる秘伝中の秘伝である
ありがた〜い、塗り薬を授けるので
今すぐ、頭をかちわって、脳みそを送るが良いぞ

963 :デフォルトの名無しさん:03/01/27 08:28
これから頭をかち割ってみます

964 :デフォルトの名無しさん:03/01/27 11:52
v(^・^)v

965 :デフォルトの名無しさん:03/01/27 12:03
963 は絶息しますた。

966 :デフォルトの名無しさん:03/01/29 14:01
そういえば次スレの案内がないので(またサーバー変わったみたいだし)
C++相談室 part15
http://pc2.2ch.net/test/read.cgi/tech/1043605481/l50

967 :デフォルトの名無しさん:03/02/05 22:15
DeveloperStudioってVisualC++.NETについてるの?
いまVisualStudio.NETアカデミックを持ってるけど・・・

968 :967:03/02/06 03:42
解決しました。ありがとうございました。

969 :デフォルトの名無しさん:03/02/08 00:16
age

970 :デフォルトの名無しさん:03/02/08 00:38
ちょっと前に、ベンチマークに時間を計る話がありましたよね。
俺の環境では、Cygwinでtimeとするといいと思うんですが、そこで出てくる
real、user、sysの意味がよくわかりません。
実時間、ユーザー時間、システム時間って言葉ではさっぱりです。
ベンチマークになるのは、どれなんでしょう?

971 :デフォルトの名無しさん:03/02/08 10:27
boost::timer

972 :デフォルトの名無しさん:03/02/11 17:49
> 安く作成

(・∀・)カエレ!

973 :デフォルトの名無しさん:03/02/12 23:10
>>970
real … プログラムの起動から終了までの時間
user … ユーザー側の実行に CPU が費やした時間
sys … OS側の実行に CPU が費やした時間

全体の処理時間を評価したいなら real 時間
アルゴリズムを評価したいなら user 時間
OS の機能を評価したいなら sys 時間

974 :デフォルトの名無しさん:03/03/12 13:41
sage

975 :デフォルトの名無しさん:03/03/13 20:30
age

976 :デフォルトの名無しさん:03/03/14 18:36
ぬるぽ

977 :デフォルトの名無しさん:03/03/14 18:58
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>976

C++相談室 part15
http://pc2.2ch.net/test/read.cgi/tech/1043605481/l50

978 :デフォルトの名無しさん:03/03/14 19:10
  ( `Д´)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V・∀・)/  
 (_フ彡        /  ←>>977

C++相談室 part17
http://pc2.2ch.net/test/read.cgi/tech/1047560042/

979 :デフォルトの名無しさん:03/03/15 00:54
 | ̄ ̄ ̄|___
 |        ヌノ|
 |______|
    ∧∧ ||
    ( ゚д゚)||
    / づΦ


980 :デフォルトの名無しさん:03/03/15 01:59
 ______
 |__     |
     |レポ   |
     |___|  
    ∧∧ ||
    ( ゚д゚)||
    / づΦ

981 :デフォルトの名無しさん:03/03/15 02:29
  ( `Д´)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V・∀・)/  
 (_フ彡        /  ←>>980

C++相談室 part17
http://pc2.2ch.net/test/read.cgi/tech/1047560042/

238 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)