トップページ⇒tech
1001コメント331KB

C++相談室 part46

■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)v2006/01/08(日) 12:15:07
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part45
http://pc8.2ch.net/test/read.cgi/tech/1133007604/
0002デフォルトの名無しさん2006/01/08(日) 12:15:46
1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
0003v(^・^)v2006/01/08(日) 12:16:58
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
0004v(^・^)v2006/01/08(日) 12:17:28
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
36 http://pc5.2ch.net/test/read.cgi/tech/1096304546/
37 http://pc5.2ch.net/test/read.cgi/tech/1098543578/
38 http://pc5.2ch.net/test/read.cgi/tech/1101473340/
39 http://pc5.2ch.net/test/read.cgi/tech/1106466303/
39(実質40) http://pc8.2ch.net/test/read.cgi/tech/1106527792/
40(実質41) http://pc8.2ch.net/test/read.cgi/tech/1113408957/
41(実質42) http://pc8.2ch.net/test/read.cgi/tech/1120190961/
43 http://pc8.2ch.net/test/read.cgi/tech/1124113879/
0005v(^・^)v2006/01/08(日) 12:18:02
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)
0006v(^・^)v2006/01/08(日) 12:18:29
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/
0007v(^・^)v2006/01/08(日) 12:19:06
C++ Coding Standards
http://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
http://www.amazon.co.jp/exec/obidos/ASIN/4894716860/(翻訳)

■Books(Templateまわり)■
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/
0008v(^・^)v2006/01/08(日) 12:19:34
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0009v(^・^)v2006/01/08(日) 12:22:03
■関連スレ■
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1131691023/
【C++】STL(Standard Template Library)相談室 4
http://pc8.2ch.net/test/read.cgi/tech/1130680264/
C/C++の宿題を片付けます 56代目
http://pc8.2ch.net/test/read.cgi/tech/1135125328/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc8.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc8.2ch.net/test/read.cgi/tech/1014486422/
【.NET】 C++/CLI について語ろうぜ 【最適】
http://pc8.2ch.net/test/read.cgi/tech/1126450441/
ATL/WTL Part4
http://pc8.2ch.net/test/read.cgi/tech/1134388951/
0010v(^・^)v2006/01/08(日) 12:25:16
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>

後氏ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

テンプレは以上です。足りない所、間違っている所がありましたら、追加訂正よろ。
0011デフォルトの名無しさん2006/01/08(日) 12:44:58
>>10
1レスで一気にやったら面白みがないだろ。
0012デフォルトの名無しさん2006/01/08(日) 12:46:24
テンプレに面白みなんて求めるなよ
0013デフォルトの名無しさん2006/01/08(日) 12:48:00
>>11
スマソ(´・ω・`)
レスを節約しようとしたんだけど。次回から別レスにするね。
0014デフォルトの名無しさん2006/01/08(日) 12:48:10
何はともあれ乙。

ところでBoostの日本語文書といえばcppllの翻訳を抜かしていいのか?
0015デフォルトの名無しさん2006/01/08(日) 12:49:34
C++相談室 part44
44 http://pc8.2ch.net/test/read.cgi/tech/1128512737/

これ抜けてた。
0016デフォルトの名無しさん2006/01/08(日) 12:51:45
>>1乙。

STLport http://stlport.sourceforge.net/
0017デフォルトの名無しさん2006/01/09(月) 05:04:26
メンバ関数ポインタの代入がコメント化した部分でコンパイルエラーがでてしまいます。

class B{
public:
 void func(void){}
 B(void)
 {
  void (B::*p)(void);
//  p=B::func;//エラー メンバー関数は呼び出すかそのアドレスをとらなければならない
 }
};

class C{
 public:
 C(void){
  void (B::*p)(void);
  p=B::func;
 }
};

int main(void){
 B b;
 C c;
 void (B::*p)(void);
 p=B::func;
 return 0;
}

他のクラスやmain関数では上手くいくのに…納得できません
class Bのコンストラクタ内でBのメンバ関数ポインタの代入はできないのでしょうか
0018デフォルトの名無しさん2006/01/09(月) 05:13:26
p = &B::func;
0019デフォルトの名無しさん2006/01/09(月) 05:15:28
>>17
それ、Borlandのコンパイラだろ。多分バグだよ。
gccだとちゃんとエラーが出るぞ。
0020デフォルトの名無しさん2006/01/09(月) 05:23:59
そうです、BCCです

関数ポインタへの代入を全部p = &B::func;にしたらコンパイル通りました。
ありがとうございます。この書き方が正しいのですね。
…ではロベールさんとこの関数ポインタの書き方は、一体???
0021デフォルトの名無しさん2006/01/09(月) 05:38:47
>>20
間違ったサイトを見ずに、規格書を読め。
0022デフォルトの名無しさん2006/01/09(月) 05:46:49
わかりました・・・
0023デフォルトの名無しさん2006/01/09(月) 17:08:34
そのサイト、「メンバ関数ポインタ」でググると一番上に出てくるな
0024デフォルトの名無しさん2006/01/09(月) 17:10:04
悪いsage忘れた
0025デフォルトの名無しさん2006/01/09(月) 17:56:32
間違った知識を流布している時点で、害悪だな。
0026デフォルトの名無しさん2006/01/10(火) 11:09:16
std::cerr の rdbuf をプログラム開始時に
ファイルストリームに変更して、
出力をファイルに落としています。

ofstream ofs("out.txt");
std::cerr.rdbuf(ofs.rdbuf());

場合によってはエラー出力を抑制したいことがあるのですが、
Windows なので /dev/null に出力するということもできません。
ヌルデバイスを表現するストリームというモノは
標準で用意されてるモノなのでしょうか?
0027デフォルトの名無しさん2006/01/10(火) 12:00:37
>>26
/dev/nullがあるから、標準では用意されなかったんだろ。
WindowsはNULにでも出すしかないな。
0028デフォルトの名無しさん2006/01/10(火) 16:10:42
Boost.Iostreams の Null Device とか
0029デフォルトの名無しさん2006/01/10(火) 19:12:27
ちわっす。
相談です。
VC++でやってるんですけどね
ボタンを押したときはちゃんと別ウインドウに表示されるんです。
しかしエンターキーを押したときに用意した別ウインドウに表示されない。
そうとうこまって降ります。
case WM_KEYDOWN:
switch( wParam )
{
case VK_RETURN:
GetWindowText(hWndEdit2,sBuff,79);
SetWindowText(hWndEdit1,sBuff);

return TRUE;
}
return 0;
       case ....以下続く
0030デフォルトの名無しさん2006/01/10(火) 19:15:07
スレ違い。sageろ。死ねばいいのに
0031デフォルトの名無しさん2006/01/10(火) 19:16:19
>>30
なんですれ違いなのか理解不能だが
切々と語ってくれ

sageについては正直すまんかった
0032デフォルトの名無しさん2006/01/10(火) 19:23:20
言語と環境の区別くらい付けてくれ。
0033デフォルトの名無しさん2006/01/10(火) 19:48:54
なんか2chは無条件にsageなきゃいけないと思ってる奴が時々いるな。
技術系の板で質問でageるのは普通だろ。
0034デフォルトの名無しさん2006/01/10(火) 19:51:57
ぶっちゃけPC初心者板でもなきゃageる意味無い。
VBスレが上がっててもVB知らなきゃ答えられんし
0035デフォルトの名無しさん2006/01/10(火) 20:01:57
知ってる奴に見てもらえりゃいいんだから別にいいだろ。
0036デフォルトの名無しさん2006/01/10(火) 20:11:36
iostream の std::endl は、改行文字を出力した後に
バッファをフラッシュしてくれるマニピュレータですが、
この改行文字は固定なのでしょうか?

CR/LF/CR+LF を何らかのフラグで切り替える
ということは出来ないでしょうか?
0037デフォルトの名無しさん2006/01/10(火) 20:14:20
>>33
もうsage強迫観念だよな、精神病の一種だw
なんでそんなになっちゃったんだろう
0038デフォルトの名無しさん2006/01/10(火) 20:36:03
すみません。
坊主憎けりゃ袈裟まで憎い。
スレ違いに腹をたてたばかりに、ageまで憎く思えてしまいました。

ちなみに、>>31の
「言語と環境の区別くらい付けてくれ」は、いまいちでした。
「もっと適したスレがある」というべきでした。
反省しています。
0039デフォルトの名無しさん2006/01/10(火) 20:45:12
>>29
Win32API質問箱 Build39
http://pc8.2ch.net/test/read.cgi/tech/1136673250/
0040362006/01/10(火) 20:51:34
やはり ios::binary でオープンして、
'\x0a' を出力するしかないのかなぁ。
0041362006/01/10(火) 20:59:25
Visual C++ 2005 でしか確認していないのですが、
std::endl は結局のところ "\n" を出力している
だけで、それを受けたストリームが
通常の '\n' の解釈にしたがって改行コードを
出力しているだけですね。
0042デフォルトの名無しさん2006/01/10(火) 21:04:13
WinとかMacって\rだと何が出力されるの?

UNIXだと普通に
\r CR
\n LF
だが
0043デフォルトの名無しさん2006/01/10(火) 21:29:20
自分でマニピュレータ定義した方が早いのでは?
0044デフォルトの名無しさん2006/01/10(火) 21:41:37
昔調べた結果

出力文字 unix dos  mac
\r      \r   \r    \r
\n      \n  \r\n  \r
\r\n    \r\n \r\r\n \r\r

入力文字 unix  dos  mac
\r     \r   \r  \n
\n     \n   \n  \n
\r\n   \r\n  \n  \n\n

0045デフォルトの名無しさん2006/01/10(火) 21:59:33
それって、\r は0x0D で \n は 0x0A?
Perlなんかだと違ったりしているようなので気になった。
ttp://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
0046デフォルトの名無しさん2006/01/10(火) 22:00:10
>>44
おおそうなっているのか
Winはdosと変わってないんだよね?
MacもOSXと昔のMacOSで変わってないのかな?
0047デフォルトの名無しさん2006/01/10(火) 22:10:23
>>45
UnixもDOSもMacもASCIIを使っているのでそのとおり。

ついでに言えばストリームをバイナリモードにすればどれもUnixと同じくそのままの文字が出力されるはず。
0048デフォルトの名無しさん2006/01/10(火) 22:55:12
何かのポインタ型をtemplateの型として受け取ったとき、
なんとかtemplate内部で、そのポインタ型の、ポインタじゃないインスタンスを生成する方法ないすかねぇ。

int main(){
Hoge<int*> hoge;
hoge.create();
}

と、した時

template <class TPTR> class Hoge{
TPTR p;
void create(){
//ここで p = new int; としたいのですが……無理っすかねぇ。
}
}

最初からHoge<int>を前提としてtemplate書けって感じですが、そこをなんとか
0049デフォルトの名無しさん2006/01/10(火) 22:56:00
あ、mainが返値なくてすいません
0050デフォルトの名無しさん2006/01/10(火) 23:02:37
>>48
Hogeのテンプレート引数は必ずポインタ型であることが必要なら、
初めから元の型をテンプレート引数に取るようにするのが一番楽。

template <class T> class Hoge{
    T *p;
    void create(){
        p = new T;
    }
};

それが駄目ならboost::remove_pointer<T>

>>49
mainだけはintを返すように宣言してあり、なおかつreturnがなければ
return 0;が行われるという扱いがなされるから問題ない。
0051デフォルトの名無しさん2006/01/10(火) 23:20:25
>>50
レスありがとうございますx2

remove_pointerのソース観てみましたが、いやはやさっぱり分かりません。
もとからない自信が、すっかり無くなってしまいました。

やはりそうですよね…おとなしく書き直すことにします。変更個所オオス!!
0052デフォルトの名無しさん2006/01/10(火) 23:43:40
>>51
boost::remove_pointer<int *>::typeはintになっているという具合。
0053デフォルトの名無しさん2006/01/11(水) 02:12:01
char* func()
{
char *str = new char[100];
char* retstr = str;
delete str;
return retstr;
};

こういう書きかたってマズイんでしょうか。
0054デフォルトの名無しさん2006/01/11(水) 02:18:54
>>53
返したretstrを何に使うの?
0055デフォルトの名無しさん2006/01/11(水) 02:21:35
>>53
ポインタが指すメモリにアクセスするつもりならマズイ。
deleteした時点でもう使えなくなっている。


ところで48が気になったのでremove_pointerを読んでみた。
それで48の望む動作をするコードが一応出来た。

template<typename T> struct remove_pointer
{
};

template<typename T> struct remove_pointer<T*>
{
     typedef T type;
};

template<typename TPTR> struct Hoge
{
     TPTR p;
     void create()
     {
         p = new remove_pointer<TPTR>::type;
     }
};

テンプレートに慣れていないせいなのかなんかキモイ。
やはり普通に元の型でやるべきだと思った。
0056532006/01/11(水) 02:46:41
よくよく考えてみればマズイですね。
コードに意味はなくなんとなく考えてみただけです。
有難うございました。
0057デフォルトの名無しさん2006/01/11(水) 02:51:18
>>53 そこの delete は delete [] な。
0058デフォルトの名無しさん2006/01/11(水) 06:43:06
>>44
実際にはコンパイラ(のランタイムライブラリ)によって変わるみたいだよ。
だから例えば同じ dos 環境下でも Microsoft のコンパイラで作成したプログラムと
Borland のコンパイラで作成したプログラムでは結果が違う。 >>4 の表のdosの欄は恐らく
Microsoft のコンパイラで作成したプログラムでの結果だろうけど、Borland のコンパイラで
作成したプログラムの場合、"\r\n" の出力結果は "\r\n" のままになる。

cf. http://www.trickpalace.net/cppll/reference/printf.htm ( このページの一番最後 )
0059デフォルトの名無しさん2006/01/11(水) 06:50:53
まあそんなものに依存するプログラムは書くなってことだな
0060デフォルトの名無しさん2006/01/11(水) 12:22:58
>55
typename 付けないといけないです

template<typename TPTR> struct Hoge
{
TPTR p;
void create()
{
p = new typename remove_pointer<TPTR>::type;
}
};
0061552006/01/11(水) 12:57:20
>>60
おっと、ごめん。
忘れてた。

VCで通ったのでそのまま書いてしまった。
0062デフォルトの名無しさん2006/01/11(水) 19:58:30
前すれにストリームの解説を求めてた人がいたけど、
標準ライブラリの解説は、ここが参考になる。

//www.cc.nao.ac.jp/fsunman/japanese/C++/index.html
0063デフォルトの名無しさん2006/01/11(水) 22:12:42
>>55さん他
うーん、凄い…ありがとうございます。

ここまで簡単に書いて頂いたのに、理解できない自分に絶望ですが。
何故こうなるんだろ…。奥が深いですねぇ(俺には)。
0064デフォルトの名無しさん2006/01/12(木) 21:27:48
こういう怪しげなテンプレートの使い方はModern C++ Designで勉強するしかないな。

テンプレートがもう少し使いやすい概念になってくれるとありがたいんだけどな。
0065デフォルトの名無しさん2006/01/13(金) 01:29:52
Modern C++ Design は序盤のタイプリストまわりが超難解、
template<template<template<hoge>,hoge>,hoge> とかの
多段テンプレートってのはLispの書式に近いんだそうだが、
そのLispの書式がこれまたわけわからんかったりする。
0066デフォルトの名無しさん2006/01/13(金) 01:47:24
要はcarとcdrをtemplateを駆使して実装してる感じか
0067デフォルトの名無しさん2006/01/13(金) 02:04:24
最近はそういう再帰的なテンプレートと並行して,
テンプレートクラスを1つの関数とみなして使う使い方も重要かと.
boost::mpl, boost::type_traits あたりは後者の見方がないと
なかなか使いこなせないように思うのですが.
0068デフォルトの名無しさん2006/01/14(土) 01:44:48
実験データがtab区切りで並んだfileがあって、
10.1 2.33 4.1 8 9.443
とかってあるとする。
こいつの最小桁は小数点何位かを知りたいんだけど、
簡単にやる方法ってあります?
上の数字列を入れると、
0.1 0.01 0.1 1 0.001
と得られると希望通りの動作。
ただし、1.20とかって数字のときにも、
0.1ではなく0.01が出ないと駄目。
0069デフォルトの名無しさん2006/01/14(土) 01:53:38
>>68
実験データひとつを、ひとつの文字列として読み出し、
文字列の後ろから小数点を検索して距離を調べ、
見つかれば距離に応じた値が答え。見つからなければ1。

C++関係無いな。
0070デフォルトの名無しさん2006/01/14(土) 02:00:26
Cなら
scanf("%s.%[^ ]", null, po)
みたいな感じで読めそうだけどC++核のは面倒くさそうだな
0071デフォルトの名無しさん2006/01/14(土) 02:01:18
- C++核
+ C++っぽく書く
0072682006/01/14(土) 02:57:44
>>69-71
やっぱ、"."を探すしかないよね。
ありがとう。
0073デフォルトの名無しさん2006/01/14(土) 09:54:19
10底のlog取るだけジャン
0074デフォルトの名無しさん2006/01/14(土) 10:25:15
それよりは文字列として'.'を探してやるほうが早そうな気がする。
0075デフォルトの名無しさん2006/01/14(土) 12:08:00
ごめん嘘 速度以前に題意に即さなかった
0076デフォルトの名無しさん2006/01/14(土) 13:26:20
>>73
ただし、1.20とかって数字のときにも、
0.1ではなく0.01が出ないと駄目。

よく嫁
0077682006/01/14(土) 15:21:06
結局こういうのにした。

double GetPrecision(const string value)
{
int length = value.size();
int dotPos = value.find(".");

if(dotPos>=0) return pow(10., 1+dotPos-length);
else return 1.;
}
0078デフォルトの名無しさん2006/01/14(土) 16:04:26
>>77
const string&にしろよ。
0079デフォルトの名無しさん2006/01/14(土) 16:06:29
ちょっと気になるのが、
dotPosがsigned型であることと、return 1だな。
0080デフォルトの名無しさん2006/01/14(土) 16:26:06
jya, return 2 ni suruyo
0081デフォルトの名無しさん2006/01/14(土) 16:29:24
俺ならintじゃなくて必ずstring::size_typeにするけど、神経質かなぁ?
0082デフォルトの名無しさん2006/01/14(土) 16:33:33
>>77
・引数が値渡しである必要は無いので参照に。
・length は string のメンバ関数を使えばいい。
・find() の引数を長さ1の文字列ではなくひとつの文字に。
・dotPos を fin() の戻り値にあわせて string::size_type に。
・見つからない判定は string::npos で。

double GetPrecision(const string& value)
{
 string::size_type const dotPos = value.find('.');
 if(dotPos != string::npos) return pow(10, 1+dotPos-value.length());
 else return 1;
}
0083822006/01/14(土) 16:39:17
うは。 pow の引数 signed にキャストしないとえらいことになるな。
0084デフォルトの名無しさん2006/01/14(土) 16:42:00
符号なしは怖いです
for(;i>=0; i--)
0085822006/01/14(土) 16:45:26
キャストキモス

double GetPrecision(const string& value)
{
 string::size_type const dotPos = value.find('.');
 if(dotPos != string::npos)
  return pow(10,-static_cast<int>((value.length()-1)-dotPos));
 else
  return 1;
}
0086デフォルトの名無しさん2006/01/14(土) 17:46:16
>>82
stringのメンバlengthとsizeは全く同じだよ。好きなほうを選べばいい。
0087デフォルトの名無しさん2006/01/14(土) 19:27:30
>>86 同じだから length = size() という変数での置き換えが不要だということだろう。
0088デフォルトの名無しさん2006/01/14(土) 20:40:18
あるライブラリーのクラスのメンバー変数のメモリ配列がうんこ
なので不都合がおきてる
class Base {
public:
int x_, y_; //ここが問題
//できればこうしたい
// std::vector<int> xy;  int &x_; int &y_;
//Base(int x , int y): xy(2),x_(xy[0]), y_(xy[1]){}

Base(int x , int y): x_(x), y_(y){}
int doSome() { return (x_*y_);}
};
けれど他人のライブラリなので変更できないので
派生クラスで解決しようとした
class Derived :public Base
{
public:
std::vector<int> xy; int &x_; int &y_;
Derived(int x , int y): xy(2),x_(xy[0]), y_(xy[1]){}
};

main()
{
Derived d(1,2)
d.doSome() ;// x_ * y_ = 1*2 が帰ってくるようにしたい。
}
けれどdoSome()はちゃんと動かない当然だけど
Baseを変更しないでメンバー関数doSome()を使う方法ないんでしょうか?
0089デフォルトの名無しさん2006/01/14(土) 20:46:04
>>88
Base b(1,2);
b.doSome();
これで不満な理由がわからんことには答えようが無い。
0090デフォルトの名無しさん2006/01/14(土) 20:54:38
x y がメモリー上で連続に並んでいる場合にしか使えない関数
func(int *p_xy){ return *p_xy + *(++p_xy) }
とかと同時に使いたい
0091デフォルトの名無しさん2006/01/14(土) 20:59:24
>>90
それは Base を使ってる限り無理だな。
ローカルな配列に一旦コピーして、後で戻すことができれば
同じ結果にできるだろうけど。
0092デフォルトの名無しさん2006/01/14(土) 21:01:28
>>90
> func(int *p_xy){ return *p_xy + *(++p_xy) }

これは未定義動作だな。メモリー上の連続性とか関係無しに。
0093デフォルトの名無しさん2006/01/14(土) 21:01:47
>>90
そういう阿呆なことをしようとするな。
0094デフォルトの名無しさん2006/01/14(土) 21:02:20
Derivedでint &x_を宣言したってBaseのメンバ関数からは
Base::x_しかみえんだろうが。
doSomeをオーバーライドしない限りどうしようもなかろうに。
0095デフォルトの名無しさん2006/01/14(土) 21:14:44
>>92
直前の副作用完了点から次の副作用完了点までの間で
同一オブジェクトに対して読み取りや変更が行われる回数は
高々1度でなければならないってのだっけ?よく覚えてないが。
0096デフォルトの名無しさん2006/01/14(土) 21:20:11
>>95
具体的に言ってしまえば*p_xyと*(++p_xy)のどちらが
先に評価されるか未定義になってる。
0097デフォルトの名無しさん2006/01/14(土) 23:41:16
Derived を Baseにcastとか・・・
0098デフォルトの名無しさん2006/01/14(土) 23:53:58
>>97 何この電波?
0099デフォルトの名無しさん2006/01/14(土) 23:58:02
コンストラクタの引数はつかわんのか?
0100デフォルトの名無しさん2006/01/15(日) 04:46:16
お前ら文字エンコードの変換ってどうしてる?
ICU?iconv?std::codecvt?

オレはICUで落ち着きそうなんだが
いい方法、ナイスライブラリがあったら教えて
0101デフォルトの名無しさん2006/01/15(日) 11:13:08
「aiueo 12345」のような入力が各行から入ってくるとき、

std::string s1,s2;
std::cin >> s1 >> s2;

として aiueo を s1 に、12345 を s2 に格納したいのですが、
可能でしょうか?
■ このスレッドは過去ログ倉庫に格納されています