- 1 名前:デフォルトの名無しさん [2008/02/27(水) 02:03:30 ]
- C++標準ライブラリの一つ、STLについて。
前スレ 【C++】STL(Standard Template Library)相談室 8 pc11.2ch.net/test/read.cgi/tech/1198435319/ 過去ログ・リンク・書籍紹介は >>2 以降
- 47 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:57:30 ]
- >>45
ostreambuf_iteratorはバイナリ出力(sputc)なんだが。 詳しくは、ストリームバッファクラス。
- 48 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:58:48 ]
- >>46
なるほど、 vector<char> Memだったとして、 ファイルストリームfsを作って、 のistreambuf_iteratorをfsから作って、 Memに代入すれば良いのですね? ってイマイチ書き方が分からない。 コンパイラに相談しながら書いてみます。 イテレーターって難い。
- 49 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:00:01 ]
- thx>>47
>ストリームバッファクラス あ、これ未調査だった。 やっぱ、ストリームの基底クラスがあるんだね。 それが分かれば分かる筈。
- 50 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:03:23 ]
- >>49
ストリームクラスの基底クラスではない。 継承関係にはない。 ストリームバッファクラス(basic_streambuf<>)のオブジェクトへの ポインタを保持している。
- 51 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:29:38 ]
- テキスト版は出来ますた。
//--------------------------------------------------------------------------- bool Test::LoadFromFile(const char *filepath, bool bAdd) { ifstream fs(filepath); string SBuf((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>()); //stringからバッファへロード } //--------------------------------------------------------------------------- bool Test::SaveToFile(const char *filepath) { string SBuf(Text()); //バッファからstringへセーブ ofstream fs(filepath); copy(SBuf.begin(), SBuf.end(), ostreambuf_iterator<char>(fs)); } //---------------------------------------------------------------------------
- 52 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:52:45 ]
- >>51
ファイルのオープンに成功したかどうかは チェックせんの?
- 53 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:02:08 ]
- 伸びてると思ったらまた宿題の続きかよ
- 54 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:05:56 ]
- >ファイルのオープン
//--------------------------------------------------------------------------- bool Test::LoadFromFile(const char *filepath, bool bAdd) { ifstream fs(filepath); string SBuf((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>()); if (!fs.is_open()) return false; //stringからバッファへロード if (fs.bad()) return false; if (fs.fail()) return false; return true; } //---------------------------------------------------------------------------
- 55 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:06:46 ]
- あ、やっぱこう。
//--------------------------------------------------------------------------- bool Test::LoadFromFile(const char *filepath, bool bAdd) { ifstream fs(filepath); string SBuf((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>()); if (!fs.is_open()) return false; if (fs.bad()) return false; if (fs.fail()) return false; //stringからバッファへロード return true; } //---------------------------------------------------------------------------
- 56 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:10:29 ]
- 少しはマニュアル読め
コード読んでるこっちが恥ずかしくなるわ
- 57 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:10:42 ]
- if(!fs)
でいいだろ
- 58 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:14:02 ]
- ラジャ!
//--------------------------------------------------------------------------- bool Test::LoadFromFile(const char *filepath, bool bAdd) { ifstream fs(filepath); if (!fs) return false; string SBuf((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>()); if (fs.bad()) return false; if (fs.fail()) return false; //stringからバッファへロード return true; } //---------------------------------------------------------------------------
- 59 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:30:28 ]
- やっぱ、バイナリの場合、書き方分かりません。
既に、 >vector<char> Memory ってのが存在していた場合は、 上の書き方のままだったらロードするときのメモリは別にとって、次に、Memoryにコピーしなきゃならないのでしょうか? それだと、メモリ2倍で勿体ないような。
- 60 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:41:00 ]
- >>59
vectorに読み込みたいのか? ならvectorにも同様のコンストラクタがある。
- 61 名前:59 mailto:sage [2008/02/28(木) 15:48:05 ]
- あ、そうではなくて、既に存在しているvectorにロードしたい場合は、ですが。
もしかして、 >vector::swap でおk?
- 62 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:55:06 ]
- >>61
assign では駄目なのか? なんか基本があやしいふいんきだから Accelerated C++ くらいは目を通した方がいいと思うんだが。
- 63 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:02:10 ]
- >>61
Memory.assign((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>()); vector<char>(Memory).swap(Memory);
- 64 名前:59 mailto:sage [2008/02/28(木) 16:05:38 ]
- >>62
ふいんきでヴぁれました? >>63 回答サンks。 上の1行で良いように見えますが、上下2行でセットですか? まずは、assignぐぐってみまつ。
- 65 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:11:15 ]
- この内容って関係してますか?
ttp://etwas.wolfish.org/diary/2007/02/28/2007022801/
- 66 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:58:38 ]
- チャットじゃないんだから少し頭ん中整理してから投下してくれ
- 67 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:04:43 ]
- >>59
おまえ C++Builderスレでも同じ様なこと書いてる奴だろ?
- 68 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:04:59 ]
- バイナリの方、整理しますた。
//--------------------------------------------------------------------------- クラスヘッダー: std::vector<char> Memory; //--------------------------------------------------------------------------- bool Bin::LoadFromFile(const char *filepath, bool bAdd) { ifstream fs(filepath, std::ios::in | std::ios::binary); if (!fs) return false; fs.seekg(0, std::ifstream::end); Memory.resize(fs.tellg()); fs.seekg(0, std::istream::beg); if (fs.bad()) return false; if (fs.fail()) return false; fs.read(&Memory[0], Memory.size()); fs.close(); return true; } //--------------------------------------------------------------------------- bool Bin::SaveToFile(const char *filepath) { ofstream fs(filepath, std::ios::out | std::ios::binary); if (!fs) return false; copy(Memory.begin(), Memory.end(), ostreambuf_iterator<char>(fs)); if (fs.bad()) return false; if (fs.fail()) return false; return true; } //---------------------------------------------------------------------------
- 69 名前:59 mailto:sage [2008/02/28(木) 17:06:08 ]
- >>67
自分もそう思ったが、よくよく見ると違った。ていうか、あっちの方がラベルが高くて難しい単語が出てくるおw
- 70 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:12:44 ]
- 鼻血ブーーーーーーーーーーーーーーーーーーー
うんこブリブリブリーーーーーーーーーーーーー
- 71 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:11:16 ]
- >>69
いや、それじゃねえな。 偶々std::を使ったレスを持ち出して、 話のはぐらかしか?
- 72 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:19:14 ]
- イミフメ>>71
ttp://articles.blog79.fc2.com/blog-date-200610.html >std::stringの大文字/小文字変換 >通常は上記の書き方で問題ありませんが、これがコンパイルエラーとなる場合があります。 についてkwskキボンorz
- 73 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:24:42 ]
- >>72
解説文も解読できないんならおまえ向いてないよ。 工場のライン工やっとけ
- 74 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:30:01 ]
- のびてると思ったら…
C++って学校の宿題スレなかったっけ?
- 75 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:31:09 ]
- >int toupper(int);
>int tolower(int); > std::transform(str.begin(),str.end(),str.begin(),toupper); >: error: no matching function for call to 'transform(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, <unknown type>)' これでもエラー出るんですよねorz
- 76 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:34:38 ]
- ゴメンなさい、
> (int (*)(int))std::toupper に直してませんですたorz
- 77 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:57:33 ]
- マクロの場合があるからと違うんか
- 78 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:13:46 ]
- >>77
違う。localeを引数に取る多重定義があって、それと曖昧と言われてしまうため。
- 79 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:29:51 ]
- 関数オブジェクトを使うべき
- 80 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 05:46:31 ]
- typedef std::map<char, void*> MyMAP //void* にはMyMAPのポインタが入る
このようにmapに自分と同じ型を含めたい場合は、どう書くのがスタンダードでしょうか? 今はnewで確保して入れて、(MyMAP*)にキャストして使用&deleteしてるんですが。
- 81 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:43:26 ]
- >>80
typedef だと無理っぽいねぇ。 class で囲ってやるか、意味的に奇怪だけど継承するとか。 struct MyMap : std::map<char, MyMap*> {};
- 82 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:15:18 ]
- 今、軽く衝撃を受けたわ
- 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
このスレではどうでもいいことだけどな。
|

|