[語法] find_if找不到的時候

看板C_and_CPP作者 (累人啊....)時間15年前 (2009/11/07 13:25), 編輯推噓2(209)
留言11則, 4人參與, 最新討論串1/1
如題,請問一下,我有一個函式,回傳值是這樣 return *(find_if(Load.begin(),Load.end(),FindOBByID(vOBID))); ^^^^^functor 若很不幸的,沒找到作何元素,指標會移到Load.end(),此時會有錯誤 請問我要怎麼攔下這個錯誤進行處理呢? try catch我不知道怎麼表示 以及,STL有沒有內部的指令有在處理這個情況呢?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.18.48.28

11/07 21:30, , 1F
你應該先檢查是不是end()再dereference
11/07 21:30, 1F

11/07 22:03, , 2F
這我知道,我想知道的是,如果iterator移到end,表示沒找到
11/07 22:03, 2F

11/07 22:04, , 3F
那我return該傳出什麼來表示沒有找到..
11/07 22:04, 3F

11/07 22:37, , 4F
當然是傳回一個跟 Load.end() 做 == 運算結果必為 true 的
11/07 22:37, 4F

11/07 22:37, , 5F
iterator。
11/07 22:37, 5F

11/08 01:27, , 6F
你應該先考慮的是如何回傳「找不到」這檔子事
11/08 01:27, 6F

11/08 12:58, , 7F
我想表達的就是av大所說的...但我不知道該如何表達
11/08 12:58, 7F

11/08 21:53, , 8F
如果堅持回傳的是一個已經 dereference 過的值,那麼就先
11/08 21:53, 8F

11/08 21:54, , 9F
檢查 find_if 結果是否為 end(), 若是則 throw, 否則可以
11/08 21:54, 9F

11/08 21:54, , 10F
將 dereference 後的結果 return.但這樣可能會有效能問題
11/08 21:54, 10F

11/08 21:55, , 11F
這只是其中一種手法,該怎麼做則是你自己要評估的
11/08 21:55, 11F
文章代碼(AID): #1AzNLHkM (C_and_CPP)