- 1 名前:デフォルトの名無しさん [2008/02/27(水) 02:03:30 ]
- C++標準ライブラリの一つ、STLについて。
前スレ 【C++】STL(Standard Template Library)相談室 8 pc11.2ch.net/test/read.cgi/tech/1198435319/ 過去ログ・リンク・書籍紹介は >>2 以降
- 83 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:32:04 ]
- >>81
>struct MyMap : std::map<char, MyMap*> {}; そんな事ができるとは思いもしなかった
- 84 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:42:27 ]
- >>83
できない理由が無ければできるもんだよ。
- 85 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:08:07 ]
- 例えば、vectorってベクターって呼んで、vectorクラスなんて呼ばないけど、
STLってできあがるものってクラスなんだね。
- 86 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:14:36 ]
- >>85
いいえ。コンテナだけがSTLではありません。
- 87 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:17:57 ]
- え”?
STL = コンテナ ∩ イテレーター ∩ ?
- 88 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:23:47 ]
- つ[<algorithm>, <numeric>, ...]
- 89 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:25:34 ]
- >[<algorithm>, <numeric>, ...]
こういうのって何て呼ぶんだ? インライン関数群?
- 90 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:45:02 ]
- なぜ何でもカテゴライズしたがるんだか
- 91 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:51:26 ]
- >>89
インクルードファイルalgorithmやnumericで定義されている関数 >>90 日本人だからでしょ
- 92 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:09:35 ]
- テンプレートだけに型に(ry
- 93 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:52:10 ]
- boost::type_traits早く標準化汁
- 94 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:59:45 ]
- 標準アルゴリズムって言葉使わないか?
- 95 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:22:11 ]
- いやまて朝鮮人かもしれんぞ
ことによると中国人かも
- 96 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:56:00 ]
- >>90
神の教えだからだろ
- 97 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:34:41 ]
- std::wstringに入ってるファイル名があるのですが、
ここから拡張子だけを抽出したい場合、定番の方法などあるのでしょうか?
- 98 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:50:10 ]
- rfind と substr でいけるんじゃね?
まあ c_str と _splitpath() のほうが面倒が少ないと思うけど。
- 99 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:02:13 ]
- Win32APIが使えるなら一発
- 100 名前:デフォルトの名無しさん [2008/03/03(月) 16:27:08 ]
- >>97
std::stringにファイル名が入ってるなら そのファイル名が入ってるstd::string型のオブジェクト名 がfilenameという名前とすると char *fname = filename.c_str(); てな感じでchar *型で受け取り #include <cstring>をインクルードしておき char *piliod = strrchr(fname,'.'); で拡張子の手前のピリオド位置を取得し piliod++;ってすれば拡張子名だけchar *型で取得できる これらの操作をwchar_t用の関数に変更すれば wchar_t *型で拡張子名を取得できる まぁ、STL板だしstd::wstringを操作するとしたなら 素直にクラスのfind_last_of使って sizetype pos = filename.find_last_of(L'.')てな感じで けつからピリオドの位置見つけてpos++;して std::wstring fextenshion =filename.substr(pos)とすれば 拡張子だけ手に入る
- 101 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:54:54 ]
- が、特殊ケースを想定するとそれだけでは済まないので、
ちまちま書くよりc_strでランタイムやAPIの既存のルーチンに任せるのが定番。
- 102 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:57:59 ]
- だよなぁ。hoge\2007.11.10\bar とか。
- 103 名前:デフォルトの名無しさん [2008/03/06(木) 14:54:51 ]
- >std::vector<char> resultBuf;
から、 >std::string SBuf; にデータを移すにはどう記述したら良いですか? SBuf = resultBuf; とするとコンパイルエラーです。 インテリセンスの無い環境でやっててつらいです。
- 104 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:12:55 ]
- >>100
char *fname = filename.c_str(); これは、不味いんじゃないのか?
- 105 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:15:26 ]
- >>103
SBuf = &resultBuf[0];
- 106 名前:103 mailto:sage [2008/03/06(木) 15:20:33 ]
- >>105
有難うございます。コンパイル通りました。 ついでですが、resutlBufにNULLが入ってる場合、どう書けば良いですか? 今回不要なんですが。 memcpy使うのもC言語っぽいしぃ。
- 107 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:21:39 ]
- std::string SBuf(resultBuf.begin(), resultBuf.end());
または、 SBuf.assign(resultBuf.begin(), resultBuf.end()); resultBufがnull終端なら>>105でもいい
- 108 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:24:40 ]
- >>105
stringの内部バッファの連続性はまだ保証されてない気がしたが。
- 109 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:27:58 ]
- >>108
それは関係ないだろ string s = "foo"; とかやるのと一緒
- 110 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:31:41 ]
- >>108
resultBufは、char型のvector vectorはバッファの連続性を保証されているから無問題 問題があるとすれば、>>107の指摘の様にnull終端では無い場合
- 111 名前:103 mailto:sage [2008/03/06(木) 15:42:13 ]
- NULL入りの場合、無しの場合、両方分かりました。
ありがとうございましたorz
- 112 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:52:55 ]
- >>108
それよりも、>>104の指摘している >>100 char *fname = filename.c_str(); の方がやばいんじゃない? *fnameの代入が終了したら、c_str()の戻したポインタの有効期限が切れているから char *piliod = strrchr(fname,'.'); の処理をするときには、何が起こるのか判らない状態になっていると思うんだけど
- 113 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:06:11 ]
- >>112
filename.c_str()で返るポインタは、filenameの非constメンバ関数が呼ばれるまで有効
- 114 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:27:45 ]
- >>105だとresultBufが空のときにまずいような気がする
- 115 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:31:54 ]
- null終端なら空ってことはありえない
- 116 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:43:22 ]
- >>113
お前そんなプログラム書いてるのか。お前には仕事を任せられんな。
- 117 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:44:44 ]
- >>113
まじ? ゴミになったのに、ゴミになったって気が付いてないとかそう言う問題の気がするが... lstrcpy(buf, str.c_str()); これは怖くないが char *word = str.c_str(); lstrcpy(buf, word); これは、いつ見ても、ヤバイ香りがするんだ 関数の返すポインタには何度も煮え湯を飲まされたし...orz
- 118 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:52:12 ]
- >>116
>>117 >>113 is right. About c_str() The return value is valid only as long as the string exists, and as long as only constant functions are called for it.
- 119 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:53:25 ]
- >>118
言い訳はいいからお前には仕事はやらん。
- 120 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:54:49 ]
- >>116
お前のレスだけ明後日の方向むいててワラタ
- 121 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:56:16 ]
- >>116
「そんなプログラム」ってどんなプログラム? >>113はプログラムの書き方なんか一言も触れてないよね。 c_str()の戻り値の寿命についての情報を書いてるだけ。 「そんなプログラム」ってどんなプログラム? それは113のどこに書いてあるの? 教えて。
- 122 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:05:37 ]
- 煽ってるようだけどその手には乗らないよ。
びびりまくりでワロタw
- 123 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:08:15 ]
- ちゃんと寿命を理解しないで使う方が怖いよ
- 124 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:09:05 ]
- 仕様をちゃんと知らずに見よう見まねでライブラリを使う人ってのは結構いるだろうけど、
見よう見まねや雑談で得た俺仕様を根拠にして、正しい仕様に基づく使い方を攻撃するのは みっともないと思う。
- 125 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:10:03 ]
- うっかり誰かがstring書き換えるコードを途中に入れてしまったら、
なんて心配をするようなら、116の言うことだって分からなくもない。
- 126 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:11:55 ]
- どうでもいいが、
>lstrcpy(buf, str.c_str()); これと >char *word = str.c_str(); >lstrcpy(buf, word); これで振る舞いが異るようにc_strを実装する方法は存在しないだろ
- 127 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:11:59 ]
- >>117
>関数の返すポインタには何度も煮え湯を飲まされたし...orz 仕様を確認せずに「香り」でコード書くから何度もそういうミスを繰り返すのかもね
- 128 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:15:34 ]
- 仕様仕様言ってて仕事がもらえない方が悲惨だと思わない?
会社にはその会社の流儀って物があってね。
- 129 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:17:33 ]
- >>126
>lstrcpy(buf, str.c_str()); は、lstrcpyの処理が終わるまで、誰もstrを変更しないことが保証されている。 >char *word = str.c_str(); >lstrcpy(buf, word); は、どこかの禿が >char *word = str.c_str(); >f(str); >lstrcpy(buf, word); と変更しない保証は何処にもないし、f(str)がstrを変更しない保証も無い
- 130 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:18:24 ]
- んでその流儀に従って何度も煮え湯を飲まされるわけ?
なんかバカらしいぞそれ。 仕様をよく確認しなかったが、流儀に従って安全そうに書いたので 救われたって話ならわかるけど。
- 131 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:19:54 ]
- まったく、ひどい論点のすり替えだぜ。
- 132 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:21:09 ]
- >>130
お前ニートか無職だろ。 協調性がゼロみたいだもん。
- 133 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:22:30 ]
- >>129
そんな話はしてねーよ 前者と後者で振る舞いが異なるはずがないと言ってるだけ
- 134 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:24:38 ]
- いや個々の会社が>>100みたいなのを禁止するのは勝手だけども、
>>100みたいな使い方が仕様に照らして問題ないという事実は変わらないだろ
- 135 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:25:44 ]
- >>132
ちゃんと働いてるし、給料も沢山もらってるから心配スンナ 世の中はそんな妙な流儀を押し付けられるような職場ばかりじゃないってこと
- 136 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:35:32 ]
- 未経験高卒ですがC++で仕事したいです
- 137 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:44:28 ]
- >>133
それはわかる。 ただ、俺から見れば117がやばい香りを感じるのは 129のような可能性があるからというのが最大の理由ではないかと思う。
- 138 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:50:14 ]
- >>137
全く持って同意 同一データに、2通りのアクセス方法があると、間違いを起こす元になると思う
- 139 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:54:50 ]
- >>137
なるほど、そういう見方もあるか 俺は、>>117がC++の実行モデルをあやふやにしか理解してないとか、 文を跨ぐと一時オブジェクトの寿命が切れるのと混同してるとか、そんなのを想像してた それに、「ゴミになったのに」云々言ってるから、そのままのコードでもポインタが無効になるのを危惧しているように読める
- 140 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:57:27 ]
- イテレータだって挿入削除で無効になるんだから、
特別神経質になるほどのことでもないと思う。
- 141 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:57:30 ]
- >>138
そういう意味では、イテレータも基のstringがconstでない場合は、 おちおち使っていられないよな。 例えばだけど、本質的にはこの2つに違いはないと思った。 (もちろん文字列中に\0はないとして) char const* p = std::strchr(s.c_str(), 'a'); std::string::const_iterator it = s.find('a');
- 142 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:05:16 ]
- 赤福の賞味期限偽装に近い問題やね
賞味期限はいつか本当に切れるだろうが、それは今じゃない...
- 143 名前:108 mailto:sage [2008/03/06(木) 18:06:14 ]
- resultBufがstringだと勘違いしてた
- 144 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:19:31 ]
- 今更だなw
だが正直でよろしい
- 145 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:49:07 ]
- >>116はどう見ても釣り。
- 146 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 19:24:41 ]
- >>116は真性の馬鹿者
仕様を初めて知って、これからはいかにも前から知ってましたよって顔で 他の人にこの問題を説明するだろう。
- 147 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 19:25:38 ]
- >>146
このスレではどうでもいいことだけどな。
- 148 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:54:34 ]
- ところでc_str()をchar*に入れてるのは誰も突っ込まないんだろうか。
- 149 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:03:52 ]
- 確かに、そういう人には仕事任せたくないなw
- 150 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:07:44 ]
- それ以前にコンパイルエラーになると思うが
- 151 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:11:41 ]
- std:stringのバッファの連続性が保証されることは、&str[0]とstr.c_str()のアドレス同一性を保証しますか?
- 152 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:15:31 ]
- 保証しない。
c.str を呼んだ場合、メモリの最確保が行われる可能性がある。
- 153 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:17:32 ]
- なるほど。str.data()はどうでしょうか。
- 154 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:19:05 ]
- 残念ながら data も同じ。
- 155 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:22:21 ]
- しかしなんだな。
今の規格ではバッファの連続性を保証していなくて、 次の規格ではバッファの連続性を保証する予定ではあるのだが、 連続性を保証したら data で参照、ポインタ、イテレータが失効する可能性は もう無くなるとしてもいいような気がするんだけど、 最新のドラフトではそうなってないんだよな。 ミスなのか、それとも何か深い理由でもあるのか・・・。
- 156 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:25:17 ]
- >>155
正直プライオリティ低いんだろ どうでもいいわと思ってる委員が多いと予想
- 157 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:26:44 ]
- しかし、そろそろそういう細かいところも詰めていかないと、
0x の x は16進数ってのもあながち冗談では済まなく・・・。
- 158 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:28:14 ]
- いざとなったら得意のundefined behaviorでいいだろ。
- 159 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:51:10 ]
- やたらスレが伸びてると思ったら・・・
もうここの連中には仕事任せられんな 今後は>>170にすべてを託すこととする なお異論は受け付けない
- 160 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 04:52:01 ]
- それは無意味にkskしろってことかい
- 161 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 09:34:55 ]
- string::swap について教えて下さい。
>void func(string &sArg) > string sBuf = "AAAAAA"; > sBuf.swap(sArg); のときって、sBufの内容がsArgに移し変えられるっていうのがswapの機能だと思います。 この場合、実装に依存するんだと思いますが、 メモリのエリアがガバっとコピーされるのではなくてクラスの参照を交換してくれるんでしょうか? 性能的に優れてるものだったら、使いまくりたいですし。 一度も使ったこと無いので、swap後にちゃんとメモリ保持しててくれるんだろうか、 落とし穴は無いだろーななんてガクブルしてます。
- 162 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 09:55:42 ]
- >>161
stringだったら、内部で保持しているであろう 文字列へのポインタや長さなどといった変数だけが交換されるとみな仮定している。 一般的に、swapは例外を投げないとされており、 しかも、std::stringのswapはO(1)と規格で定められている。 だから、文字列の中身まで交換する実装はありえない。
- 163 名前:161 mailto:sage [2008/03/07(金) 10:29:50 ]
- サンクス。
>一般的に、swapは例外を投げないとされており、 へぇー、勉強になりました。 >しかも、std::stringのswapはO(1)と規格で定められている。 勉強になりましたが、O(1)って何だ?_? >だから、文字列の中身まで交換する実装はありえない。 あ、そうなんですか? 例外を発生できないとなると、参照を交換する以外に実装無いと思うんですが。 だって、交換じゃなくてコピーならば、メモリを確保しないといけないし、そうなるとエラーが発生する可能性があるような。 って素人なのに生意気逝ってすみません。
- 164 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:37:30 ]
- O(1)というのは、例え文字列が長くてもswapが一定時間で終わらなければならないってこと。
文字列をコピーするなら、文字列が長くなればそれだけコピーに時間が掛かるから、この制限を満たせない。 詳しくは「計算量」でググれ。 >例外を発生できないとなると、参照を交換する以外に実装無いと思うんですが。 まさに>>162はそう言ってるんだと思うよ。 中身をコピーして交換するんじゃなくて参照(具体的にはポインタ)を交換する。
- 165 名前:161 mailto:sage [2008/03/07(金) 10:40:31 ]
- ラジャ!
>文字列の中身まで交換する実装はありえない。 つまり、中身をコピーする実装はありえない、って文章ですね。 で、そう言い切れる理由はO(1)で時間制限してて、”ま、参照を交換する実装にしる!”、っていわば指令が出てるわけですね。
- 166 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:58:42 ]
- >>165
deep copyをするとno throwの保障ができなくなる。
- 167 名前:161 mailto:sage [2008/03/07(金) 11:00:02 ]
- すみません、教えてクンですみませんが、最後に記述を教えて下さいorz
swapを使いまくりたくなりました。 vector<char>とstringの間で、swapする記述はありますでしょか? vectorメモリは連続しているので、vector同士だとswapできるんじゃないかと思ったのですが。 直にメモリアクセス?イテレータンを無視し過ぎるのも良くないとは思わないでも無いですが。
- 168 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:07:45 ]
- >vector<char>とstringの間で、swapする記述はありますでしょか?
ない。実装上も、例えばstringがnull終端の分だけ余計に内部バッファを持っているなら無理。 >vectorメモリは連続しているので、vector同士だとswapできるんじゃないかと思ったのですが。 vector同士ならできる。
- 169 名前:161 mailto:sage [2008/03/07(金) 11:09:58 ]
- >ない。実装上も、例えばstringがnull終端の分だけ余計に内部バッファを持っているなら無理。
なるほど。納得。下手にやるとはまりますね。 >vector同士ならできる。 vectorの異なる構造体同士でもできますか? 記述例超キボンw
- 170 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:19:32 ]
- テンプレートパラメータが違うとダメだろう
- 171 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:28:20 ]
- 記述例もなにも、vとv1が同じ型のvectorなら、
v.swap(v1); で交換できる。vectorに限らずあらゆるコンテナで。
- 172 名前:161 mailto:sage [2008/03/07(金) 11:36:47 ]
- 全部分かりました。有難うございましたorz
つまり、コンテナが違うとswapはキャストやらなんやらやヴぁい記述になるわけですね(はまるからやらないけど)
- 173 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:11:25 ]
- 質問です。
クラスメソッドの引数で、 >method(string s1) { method(s1.c_str()) } >method(const char *s1); みたいな感じで、オーバーロードで「string」も「char *」も両方受け入れるようにしてるんですが、 どちらか片方だけ定義、ということにできますでしょうか?
- 174 名前:173 mailto:sage [2008/03/07(金) 13:15:17 ]
- 2つ要るとしたら、stringベースとchar*ベースと効率が良いのはどちらでしょう?
まぁ、大差無いですか?
- 175 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:20:59 ]
- >>173
stringだけ書いとけばconst char*からstringを暗黙に構築してくれると思うが、効率は良くないかも
- 176 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:37:12 ]
- >>173
片方がconst char * なんだから、string const & の方がいいんでないかい? で、どっちみちstringを受ける方もconst char * 版を呼び出すなら要らないわけで。
- 177 名前:173 mailto:sage [2008/03/07(金) 13:37:33 ]
- 何だ、そうでしたか。無駄に2つ作ってしまったorz
- 178 名前:173 mailto:sage [2008/03/07(金) 13:42:12 ]
- 頭が混乱してましたが、
>stringだけ書いとけば の場合は、引数が入力である場合は、おk、 >片方がconst char * なんだから、string const & の方がいいんでないかい? これ(つまり、& )を選択した場合は、2つ書かないといけないんですよね? コンパイラで試せば良いのですが、皆さん普通はどうされてるのか知りたくて。
- 179 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:44:52 ]
- >>178
わけがわからん。何がしたいのか書きなおしてくれ。
- 180 名前:173 mailto:sage [2008/03/07(金) 13:48:53 ]
- ごめんなさい、テストプログラム書いたら違っていました。
つまり、 >stringだけ書いとけば でおk。 >string const & の方がいいんでないかい? でおk。 但し、char *を渡すと、W8030 Temporary used for parameter のウォーニングが出ると。
- 181 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:52:35 ]
- 話を読む限りstringやconst char*である必要性を感じないし、
俺だったら初めと終わりのイテレータを引数に取るようにする。 stringでもconst char*でもないやつもかかってこい。
- 182 名前:173 mailto:sage [2008/03/07(金) 13:53:05 ]
- あ、「「string &」だとウォーニングだったのが、「string const &」だとウォーニング消えました。
つまりやりたかった、 >string と char *の一本化、 および、 >参照渡しでメモリ節約&コンパイルウォーニング無し の全て解決しました。orz
- 183 名前:173 mailto:sage [2008/03/07(金) 13:54:45 ]
- >俺だったら初めと終わりのイテレータを引数に取るようにする。
はつみみです。 これ知っとくと大分楽できそうですね。何が良いのか調べてみます。 (参考サイトでも何でも教えて頂ければ参照します。レスで教えてというのも嫌われそうなので)
|

|