看板 Programming 關於我們 聯絡資訊
※ 引述《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)
Killercat:大致上明白了 非常感謝您解說/bow 218.163.161.9 08/18 00:24
kafy:不懂,每次的end()不是都是重新呼叫的嗎? 61.216.2.31 08/18 02:05
kafy:我自己跑的結果是沒問題的耶... 61.216.2.31 08/18 02:12
cplusplus:每次都是在比較後才append到seq220.139.233.250 08/18 22:26
cplusplus:每次也都是重新呼叫end 照理講不會危險220.139.233.250 08/18 22:27
cplusplus:如果重新呼叫有危險那這個lib應該爛掉了220.139.233.250 08/18 22:28
b6s:請參考 Effective C++ 之類的書 59.105.131.104 08/19 02:15
b6s:原 po 說在 VC7.1 有問題,mingw 沒問題 59.105.131.104 08/19 02:16
b6s:這種事其實不少見...... 59.105.131.104 08/19 02:16
b6s:btw, Design Pattern 書裡也有講。 59.105.131.104 08/19 02:20
cplusplus:所以vc 7.1 的lib可能爛了嗎220.139.233.250 08/19 15:06
cplusplus:請問在EFFECTIVE C++裡哪個議題呢? 謝謝220.139.233.250 08/19 15:08
cplusplus:但我還是絕得不該爛掉 不然就VC的爛掉了220.139.233.250 08/19 15:09
cplusplus:剛剛測試在VC7.1跟8都沒問題...220.139.233.250 08/19 15:14
b6s:My bad, 是 exceptional C++ 59.105.131.104 08/23 19:09