Re: 請問STL的string這樣寫有錯誤嗎?

看板Programming作者 (http://b6s.blogspot.com)時間18年前 (2006/08/17 23:53), 編輯推噓10(1005)
留言15則, 4人參與, 最新討論串4/6 (看更多)
※ 引述《Killercat (殺人貓™)》之銘言: : An input iterator addressing the first occurrence of the specified value in : the range being searched. If no such value exists in the range, the iterator : returned addresses the last position of the range, one past the final element. : (這個基本上跟.end()的定義相同) : 我比較不明白的是, .end()跟string::npos應該不會是一樣的直吧 +_+ : 不過我似乎也有string::npos當傳回值的印象...? : 請問這大概是...? 抱歉,我沒說清楚一件事。您在原程式碼中用的和現在查到的這個是 <algorithm> 的 find(),我提到的則是 <string> 的 string::find(), string::npos 是 ANSI C++ 規定的傳回值,配合 string::size_type 針對 VC,請見 http://msdn2.microsoft.com/en-us/library/tbbk8hs6.aspx 當您把 string 當 container 操作它的 iterator 時, string::end 照理說和 string::npos 的語意相通。 但是,重點來了,迴圈裡有 seq+=inl[i]; 表示 string 當 container 時的 iterator 不再安全了, 換句話說,seq.end() 不再保證有如您預期的行為。 所以,我會建議改用 string::find() 和 string::npos 當然,最好是重新考慮用別的寫法。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.105.131.104 ※ 編輯: b6s 來自: 59.105.131.104 (08/17 23:56) ※ 編輯: b6s 來自: 59.105.131.104 (08/17 23:57)

08/18 00:24, , 1F
大致上明白了 非常感謝您解說/bow
08/18 00:24, 1F

08/18 02:05, , 2F
不懂,每次的end()不是都是重新呼叫的嗎?
08/18 02:05, 2F

08/18 02:12, , 3F
我自己跑的結果是沒問題的耶...
08/18 02:12, 3F

08/18 22:26, , 4F
每次都是在比較後才append到seq
08/18 22:26, 4F

08/18 22:27, , 5F
每次也都是重新呼叫end 照理講不會危險
08/18 22:27, 5F

08/18 22:28, , 6F
如果重新呼叫有危險那這個lib應該爛掉了
08/18 22:28, 6F

08/19 02:15, , 7F
請參考 Effective C++ 之類的書
08/19 02:15, 7F

08/19 02:16, , 8F
原 po 說在 VC7.1 有問題,mingw 沒問題
08/19 02:16, 8F

08/19 02:16, , 9F
這種事其實不少見......
08/19 02:16, 9F

08/19 02:20, , 10F
btw, Design Pattern 書裡也有講。
08/19 02:20, 10F

08/19 15:06, , 11F
所以vc 7.1 的lib可能爛了嗎
08/19 15:06, 11F

08/19 15:08, , 12F
請問在EFFECTIVE C++裡哪個議題呢? 謝謝
08/19 15:08, 12F

08/19 15:09, , 13F
但我還是絕得不該爛掉 不然就VC的爛掉了
08/19 15:09, 13F

08/19 15:14, , 14F
剛剛測試在VC7.1跟8都沒問題...
08/19 15:14, 14F

08/23 19:09, , 15F
My bad, 是 exceptional C++
08/23 19:09, 15F
文章代碼(AID): #14v93XNZ (Programming)
文章代碼(AID): #14v93XNZ (Programming)