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


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

C++相談室 part69



1 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 21:04:54 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part66
pc12.2ch.net/test/read.cgi/tech/1231640498/

※part63, part66 が重複していたようですので part69 としました。

52 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 13:20:44 ]
1バイトのみの出力であれば、「NUL文字までループ」しない分、前者の方がわずかながら速いだろう。
しかし気にするほどではない。

53 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 13:24:50 ]
考え方によっては":"が何回も出て来るなら、
同じ文字列をマージする最適化をコンパイラが行うとかは考えられない?

54 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 14:13:20 ]
考えたくない

55 名前:11 mailto:sage [2009/05/06(水) 14:19:35 ]
また来てすみません
 コンテナのa < b
 lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())

sed::setの場合は格納している値を辞書式に比較すると言うことでしたが、
std::mapの場合はどうなるのでしょうか?
mapの格納している要素はkeyと値の組になっていますが
どちらで比較するのでしょうか?

サンプルソース
C++ code - 51 lines - codepad
ttp://codepad.org/XOdZ3Avt

mymap<yourmapがtrueとなるのは
 Rule1:mymapの最初のkey < yourmapの最初のkey の時。
 Rule2:(mymapの最初のkey == yourmapの最初のkey) ならば (mymap[key]で得られる値 < yourmap[key]で得られる値) の時。
 Rule3:最初のkeyも最初の値も同じなら、次の要素でRule1, Rule2を適用する。
 Rule4:Rule3にてmymapの方がyourmapより先に次の要素が無くなった時。
といった感じがするのですが、ご存じの方いらっしゃいますか?


56 名前:50 mailto:sage [2009/05/06(水) 14:20:47 ]
>>51-54
どうでも良い程度の差ってことか。
どうも。

57 名前:デフォルトの名無しさん [2009/05/06(水) 14:25:31 ]
VS2008をダウンロードして起動してみたのですが、
全くどう使っていいのかわかりません…
画像付きで解説してるサイトはありませんか?

とりあえずハローワールドすら出来ないと泣きそうです
VBAなら少しさわったことあります
よろしくお願いします


58 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 14:28:56 ]
>>57
★初心者にVisual C++を教えるスレ★ Part33
ttp://pc12.2ch.net/test/read.cgi/tech/1235292263/


59 名前:デフォルトの名無しさん [2009/05/06(水) 14:29:25 ]
msdn.microsoft.com/ja-jp/library/szatc41e.aspx

60 名前:デフォルトの名無しさん [2009/05/06(水) 14:33:21 ]
>>58
おお、そんなスレがありましたか失礼しました
>>59
ありがとうございます!



61 名前:11 mailto:sage [2009/05/06(水) 15:31:33 ]
>>55
・・・な〜んか違うよーな。
コンテナの比較って相変わらず分からないです。

62 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 15:39:41 ]
>>61
あってんじゃね?俺も知らんけど、見た感じそうなってると思う。

63 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 15:56:35 ]
その理解でいいだろ。
lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())
は対応するイテレータがそれぞれ参照している要素をoperator<で比較していく。
mapのイテレータが参照しているのはpair<key_type,mapped_type>。
pair<first_type,second_type> x,y に対して x < y が真になるのは
x.first < y.first または !(y.first < x.first) && x.second < y.second が真になるとき。

64 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 15:58:48 ]
>>63
× !(y.first < x.first) && x.second < y.second
○ y.first == x.first && x.second < y.second

65 名前:64 mailto:sage [2009/05/06(水) 16:07:08 ]
あ、pairって等価ベースだったか。すまん。

66 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 17:49:02 ]
本を買って通勤中や暇な時間に勉強しようと思うのですが、
オススメはありますか?
上の方のレス見たらそんな本は捨てた方がいいとか書いてあって怖くなりました(間違った知識がつくんじゃないかと)

とりあえず古本屋も見てみたのですが、10年ぐらい前のしかありませんでした…

67 名前:デフォルトの名無しさん [2009/05/06(水) 17:56:43 ]
やさしいC++ 第3版

68 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 17:58:45 ]
ありがとー!
さっそく買ってきます

69 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:11:35 ]
レビューとか読んでからにしろよ。

70 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:36:39 ]
教えてください、以下のプログラムでいい方法がないものかと。
またはC++的にはこう書いた方が正しい等です。

//-------------------
class AA { int a1; };
//-------------------
class BB {
AA **app;
void setapp(int no) {
app = new (*AA)[no]; //<-ここが不明 エラーになる
}
};
//-------------------
int _tmain(int argc, _TCHAR* argv[])
{
BB dat;
dat.setapp(10);
}
1.<−−ここが不明の部分の書き方
2.こんなのは良くない、もっといい方法がある。
の2つです。お願いします。



71 名前:11 mailto:sage [2009/05/06(水) 20:30:32 ]
>>62-63
ありがとうございます。
最終的には、>>55の見解で良いとのことですが、
(pairが)等価ベースとはどういう事でしょうか?



72 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:34:12 ]
>>70
エラーメッセージが読めるようになってからまたお越し下さい。

73 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:37:40 ]
>>70
もしかして多言語の経験者かい?


74 名前:70 mailto:sage [2009/05/06(水) 20:43:33 ]
error C2226: 構文エラー : 'AA' 型指定子の前あるいは内部で構文エラーが発生しました。
エラーメッセージは上記です。 正直わからないから聞いているので。
答えられないのであればあきらめます。

75 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:45:14 ]
>>74
> 答えられないのであればあきらめます。
ああそうか、じゃあ俺の頭じゃ答えられないわ。


76 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:46:35 ]
app = new AA*[no];

77 名前:70 mailto:sage [2009/05/06(水) 20:52:41 ]
>>76
出来ました、ありがとうございます。
所で、クラスの配列を動的に作ってアクセスする場合。
この様なポインターの配列をnewしてクラスデーターを入れて管理するのは。
ごく普通のやり方でしょうか? どうもなんか、いまいちなような気がして・・・

78 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:53:01 ]
>>70
> 2.こんなのは良くない、もっといい方法がある。
強いて挙げると
 newで得た配列はデフォルトコンストラクタでしか初期化されません。
 ポインタの(と言いますか組み込み型の)配列となると全く初期化されませんけど大丈夫ですか?
ということと
 setappがpublic:じゃいのでアクセスできませんよ。
ということと
 忘れずにdeleteしてくださいね
ということと
 もしかしたらnewで例外が発生するかもしれませんよ
ぐらいかな。

79 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:57:12 ]
一応、std::vector を使うのがいいかなと思う。std::vector<AA*> って感じ。
これでも>>78の問題はほとんどそのままだが。

80 名前:78 mailto:sage [2009/05/06(水) 20:58:23 ]
>>77
そもそも>>70だとAAのインスタンスは一つも存在していないんだけど、
それは分かっている?分かっていない?




81 名前:70 mailto:sage [2009/05/06(水) 21:00:59 ]
public:忘れてました、すみません。 最終的に
//-------------------
class AA { int a1[10]; };
//-------------------
class BB {
public:
AA **app;
void setapp(int no) {
app = new AA*[no]; //<-ここが不明
}
};
//-------------------
int _tmain(int argc, _TCHAR* argv[])
{
BB dat;
dat.setapp(3);
dat.app[0] = new AA();
dat.app[1] = new AA();
dat.app[2] = new AA();
}
こんな感じでうまくいったのですが、本当にこのままでいいのだろうかという疑問が・・・

82 名前:70 mailto:sage [2009/05/06(水) 21:06:15 ]
std::vector 使ったことないです、調べて見ます。ありがとうございます

83 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 21:08:14 ]
あとはboost::ptr_vector<AA>とか

84 名前:78 mailto:sage [2009/05/06(水) 21:10:22 ]
>>81
> こんな感じでうまくいったのですが、本当にこのままでいいのだろうかという疑問が・・・
>>78にあるとおり、良くない。
いつdeleteするかとか、newが4回あるうちのどこかで例外が発生しうるがその時はどうするかとかは?
たぶんboostないしstd::tr1のshared_ptrが必要になるのではないでしょうかね。

・・・ってstd::vector使ったこと無いのか。
じゃあまずSTLのお勉強だな。

85 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 21:14:26 ]
STLの前にポインタの勉強からじゃ

86 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 23:45:57 ]
構成上、どうしてもコンストラクタで例外を投げたいんだけど、
良いんだよね?別に。
そう言うこともあるよね?


87 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 23:50:53 ]
某サイトで「コンストラクタで例外を投げるな」なんて書いた人がいたけど
基本的には問題ないし、コンストラクタで正常にオブジェクトの構築が出来ないときは
例外を投げるのが最も適切。

もし、気になっている問題があるなら、具体的に書いてもらってもいいけど。

88 名前:デフォルトの名無しさん [2009/05/07(木) 00:05:27 ]
>>86
全く問題ないよ。

89 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 00:13:08 ]
>>71
> (pairが)等価ベースとはどういう事でしょうか?
その元レスは直前のレスに対する独り言のようなものだろうから文面をそのまま受け取っては駄目。
おそらく以下の説明のようなことを踏まえての発言。

pairのoperator<はまずfirst同士を比較して、それが等しければsecond同士を比較するという流れ。
ここで等しければを判定するのに等値かどうかで判定するのではなく等価かどうかで判定する。

90 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 00:21:12 ]
>>86
後始末が必要なものをしっかりかたづけてればおk。

A(){
 h = gethandle(); // 後で明示的に解放する必要あり
 /* このあとに例外投げるかもしれない処理を行う */
}

~A(){
 releasehandle(h);
}

みたいな場合、例外をコンストラクタの外に投げる前に後始末が必要。



91 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 00:32:28 ]
「解放すべきもの(newで確保されたメモリや、その他のリソースなど)を保持してデストラクタで解放する」
という仕事をするためのクラスを利用すると、例外に対処しやすい。

そういうクラス自体の設計時は例外安全に注意する必要がある(コンストラクタでうかつに例外を投げてはならない)
が、そういうクラスの利用者のほうは適当に例外を投げてもリソースリークが起こらないようになる。

92 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 00:44:59 ]
日本語でおk

93 名前:91 mailto:sage [2009/05/07(木) 01:02:48 ]
>>92は俺に言ってる?

例えばスマートポインタを使う場合が最も分かりやすい。
次のようなクラス MyClass があったとする。

class MyClass {
public:
 MyClass();
 ~MyClass();
private:
 MyAnotherClass* p;
};

で、MyClass::MyClass() の内部で p = new MyAnotherClass(); などとして、
MyClass::~MyClass() で delete p; しているとする。この場合、MyClass::MyClass() が迂闊に例外を
スローすると、MyClass::~MyClass() が実行されないためにpが解放されない場合があるから、
例外をスローする場合はpの解放がきちんとされるように、注意深くコードを書かなければならない。

ただし、メンバ変数 p をポインタではなくスマートポインタとすると、そのような注意は不要となる。
例えば std::auto_ptr<MyAnotherClass> p; となっていて、MyClass::MyClass() の内部で
p(new MyAnotherClass()); とした場合、たとえMyClass::MyClass()が例外をスローしても
newされたものはちゃんと解放されるから、神経質にならなくて済む。

忘れてはならないのは、スマートポインタのコンストラクタが迂闊に例外をスローしてしまうと、
結局、リソースリークの可能性は消えないということだ。まあ自分でスマートポインタを書いて使うことは
普通の人はないと思うけど、実際 boost::shared_ptr 等はコンストラクタで例外を投げる場合があり、
その場合でもリソースリークが起こらないようにちゃんと配慮されている。

94 名前:91 mailto:sage [2009/05/07(木) 01:08:31 ]
ごめん、std::auto_ptr 使って p(new MyAnotherClass()); は無いね。
コンストラクタのメンバ初期化子に書いたと思ってくれ。

95 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 08:24:20 ]
>>91
「そういうクラス」「そういうクラスの利用者」って何?

「そういうクラスの利用者『のほう』」って何と比べてるの?

96 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 10:34:03 ]
>>95
文脈から明らかでないか?



97 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:10:34 ]
明らかじゃないから聞いてるんだろ。
明らかだと思うなら、どう明らかか書けばいい。

98 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:16:18 ]
例えば、>>93>>91の説明であるならば、
>>93に登場するクラスのどれが、「そういうクラス」に相当するのか?

99 名前:11 mailto:sage [2009/05/07(木) 11:35:51 ]
>>89
等値(equality)
a == b
等価(equivalence)
!(a < b) && !(b < a)
これの事ですね。
ありがとうございました。

100 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:36:10 ]
>>98
std::auto_ptr とか boost::shared_ptr とかが「そういうクラス」。



101 名前:100 mailto:sage [2009/05/07(木) 11:37:50 ]
まあクラスじゃなくてクラステンプレートか。
std::auto_ptr<MyAnotherClass> とかが「そういうクラス」だと思ってもらえれば。

102 名前:86 mailto:sage [2009/05/07(木) 11:51:26 ]
>>87-101
サンクス。
でかいクラスじゃなく、リソース漏れも起こすことはないハズのコーディングにしてあるので
大丈夫だ。どうも!

103 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 15:40:22 ]
>>101
thx


104 名前:デフォルトの名無しさん [2009/05/09(土) 16:12:48 ]
std::vector< std::pair< key_t, value_t > > v;
for( std::vector< std::pair< key_t, value_t > >::iterator i = i.begin();....

というコードがあるとして、for文の「std::vector< std::pair< key_t, value_t > >」のように
長いテンプレート型書く必要が多々あり、それが面倒に感じます。
「v.self_type」のような、変数名から型を引っ張ってくるような
仕組みは出来ないものでしょうか?

105 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 16:15:39 ]
typedef すれば?

106 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 16:22:02 ]
次期規格でdecltypeというのが出来るが今は無理

107 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 16:25:10 ]
typedef しとけ

108 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 16:32:54 ]
>>105-107
承知しました。
ありがとうございました。

109 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:09:32 ]
decltype よりゃ auto じゃね

110 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:10:34 ]
>>107
だからC++03ではtypmlateのtypedefは無理だっつーに



111 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:11:17 ]
×typmlate
○template

112 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:16:55 ]
>>110
部分特殊化のような形の typedef は無理だが
>>104 みたいなのは全く問題ないっつーか、常套手段だろ

113 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:17:48 ]
>>110
パラメータが確定してるテンプレートクラスならできるぞ
できないのはtypedefのテンプレート

114 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:17:57 ]
>>110
・・・まさかやったこと無いわけじゃないよな?

115 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:21:48 ]
typedef typename std::vector< std::pair< key_t, value_t > > hoge;

通りませんでしたよ^^
VC2008

116 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:30:40 ]
typename要らない

117 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:55:02 ]
釣り臭いな

118 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:03:04 ]
>>115
using alias使うんだよ
using hoge = std::vector< std::pair< key_t, value_t > >;

119 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:19:02 ]
素だろ
また的外れてるし。

120 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:48:32 ]
>通りませんでしたよ^^
これは釣りだろ



121 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 23:06:38 ]
VC++の学習用にサブPCを導入しようと思うのですが、
atom330でも問題なさそうでしょうか
あまりに重そうならE1400辺りで自作しようと思います

122 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 23:46:34 ]
別に問題ないだろ
IDE使いたいなら話は別だが

123 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:12:43 ]
>>121
全く問題ないよ。
IDE使ったところで問題なんて起きないから大丈夫。

124 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:20:19 ]
VC++2008EE使っていますが、
変数の値を常に表示する方法はありますか?
現在はcout<<hoge;みたいなものを随所に入れています
VBにあったウォッチウィンドウみたいな奴が欲しいです・・

125 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:34:37 ]
メニューの
デバッグ|ウィンドウ|ウォッチ
デバッグ|クイックウォッチ

126 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:34:47 ]
>>124
無いわけ無い。
それともEEだと存在しないとか??

127 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:44:28 ]
>>125-126
ttp://www1.axfc.net/uploader/Img/so/45753.jpg
ないっぽいです・・
イミディエイトウィンドウならあるんですが、無料だとこんなものかもしれません

128 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:51:16 ]
>>127
メニューにはデバッグ実行中でないと出てこないはず
というか、初期状態でデバッグ実行したら下に自動変数とかローカル変数のタブ出てこない?

129 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:53:32 ]
確かに間違って閉じちゃうと探すのに苦労するね


130 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:55:52 ]
ああ、出てきましたありがとう!!!
コッソリタブが増えてました
こりゃ気づきませんぜ・・



131 名前:デフォルトの名無しさん [2009/05/10(日) 05:03:03 ]
>>130
いや、まぁ・・・気づくけどな。

132 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:21:46 ]
誰でもそりゃわかってりゃ気づくけどな。
普通はなかなか気づかないだろう。

133 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:26:07 ]
VC6の時代から使ってる人なら「必ずあるはずだ」って必死に探すなw

134 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:29:17 ]
有用なサービスほど消えることは無い、 無いよな、 しかし気がつくと、  いや、無いと言ってくれー

135 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 11:09:06 ]
メニューから消えてるだけのこともある
いくつかのショートカットキーとか

136 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:08:18 ]
動的なハッシュテーブルを作っていて、[]演算子をオーバーロードしようと考えているんですが、
代入する時と参照する時とで挙動が完全に変わってしまいます。

C#のgetメソッドやsetメソッドのような完全な書き分けってどうやるんでしたっけ。

137 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:12:27 ]
そういう書き分けは無いのでやるなら別関数にすれ
挙動が異なるなら、別の表記を取るのが一番間違いが無い

138 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:13:10 ]
書き分けは無理

proxyクラスでも使え

139 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:13:45 ]
const メンバ関数か非 const メンバ関数かという差で挙動を変える事はできるが、
それで大丈夫なものなのかは疑問だ

140 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:14:40 ]
[] の戻り値をクラスにする方法もあるけど・・・
個人的にはあまり好きではないな



141 名前:136 mailto:sage [2009/05/10(日) 17:16:05 ]
>>137-139
thx

いくらヘルプを読んでも分からないわけだ。


142 名前:136 mailto:sage [2009/05/10(日) 17:16:58 ]
>>140
やっぱそれしかないか・・・

143 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:18:27 ]
演算子のオーバーロードはあまり乱用すべきものではないので
細かい技法を使わないと演算子のオーバーロードでは実現できないような処理は
普通のメンバ関数にしてしまった方がいいと個人的には思う

144 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:48:08 ]
>代入する時と参照する時とで挙動が完全に変わってしまいます。

同じように見せたいのなら<map>みたいにすればいいと思うけど

145 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:00:21 ]
std::cin >> hoge;で受け取れるような自作クラスMyClassのオペレータオーバーロードはどうすればよいのですか?
std::cout << hoge;ならサンプルコードが良く見つかるのですが。。。

146 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:17:54 ]
同じようにすりゃ良いじゃん

147 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:22:19 ]
>>146
というのは、例えば
std::string str;
std::cin >> str;
としてstrから適切に処理すれば良いってことですか?


148 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:32:28 ]
std::complex<> を参考にしろよ

(n,m) の形式で読み取るが、どのようにして実現しているのか
考えるのも楽しいものだ

149 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:33:27 ]
istream &operator >>( istream&, const MyClass& );

150 名前:147 mailto:sage [2009/05/10(日) 19:52:38 ]
>>148
ありがとうございます。
さっそく見てみます。

>>149
ありがとうございます。
宣言の方は
std::ostream& operator << 〜
で理解しました。



151 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 21:46:01 ]
C++ code - 31 lines - codepad
ttp://codepad.org/YWNCgmUO
このソースはgccに付いてきた
std::complex<〜>のstd::istream& operator>>(std::istream&,complex&);のソースなのですが、
この
if (__ch == ')')
__x = complex<_Tp>(__re_x, __im_x);
else
__is.setstate(ios_base::failbit);
が何をしているのか分かりません。
自分なりに推測するとstd::istreamで読み込んでいった結果、所定のフォーマットになっていない(閉じ括弧がおかしい)場合にエラーを伝えるべくsetstateとやらをしているようなのですが、
__is.setstate(ios_base::failbit);
ってどういう意味ないし効力なのでしょうか?

152 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:00:38 ]
std::ios::failbit が立つと、それ以降の入力は一切行われなくなる
これがCとは違う所

この状態をクリアするにはis.clear()を行う






[ 続きを読む ] / [ 携帯版 ]

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

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