看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++2008 問題(Question): 不好意思,請教一下,我寫一個簡單的程式如下: http://codepad.org/v6ChBZr7 主要是想刪除vector中小於或等於0的數字 如果是這樣子做: vint1.erase(remove(vint1.begin(),vint1.end(),vint1.at(vint1_index)),vint1.end()); ^^^^^^^^^^^^^^^^^^^^^ compiler就會說:發生例外狀況: std::out_of_range。 不知道有什麼辦法可以解決呢? 謝謝幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.100.113 ※ 編輯: bernachom 來自: 114.34.100.113 (10/18 21:12)
legnaleurc:vector::at 出來的不是 iterator 10/18 21:27
legnaleurc:請參考 remove_if 10/18 21:27
x000032001:你怎麼會想出這種外星人程式~"~ 10/18 21:27
bernachom:因為對這語法不是很熟..我到處查資料寫出來的...@_@ 10/18 21:29
bernachom:謝謝幫忙,我在試試看 10/18 21:29
legnaleurc:這還好吧 ... 不會很外星啊 10/18 21:29
priv:我最近也在初學C++,可以幫忙解釋一下為什麼要這樣寫嗎 10/18 21:38
priv:不是用iterator訪問vint1這個vector之後決定每個元素 10/18 21:40
priv:是否要erase,erase後得到新iterator,否則就++iterator 10/18 21:40
priv:這邊用remove有什麼優點? 10/18 21:41
用erase(remove())是我查文章查到的...我也不知道有什麼優點... http://www.360doc.com/content/09/0615/20/130577_3908783.shtml 我就先把他拿來用而已... ※ 編輯: bernachom 來自: 114.34.100.113 (10/18 21:43)
x000032001:因為如果只是要刪掉<=0的數字 根本不用這麼麻煩吧 10/18 21:47
tropical72:c++ 我覺得 algorithm 可以先 view 過一遍再看其他的. 10/18 21:47
tropical72:參考一下 http://codepad.org/QUIdE7zy 10/18 21:47
bernachom:謝謝各位的幫忙^_^ 10/18 21:49
bernachom:我實際上的程式更複雜,只是我把我的需求寫成這一段而已 10/18 21:50
bernachom:所以可能我的做法上會奇怪一點點,還請見諒.. 10/18 21:51
loveme00835:http://codepad.org/xlGjSWj5 10/18 21:58
版主大人,你的好精簡...我反應不過來..我要研究一下...謝謝^_^
FallwinDs:remove的用法沒有問題 問題在你把-3 remove掉以後 10/18 22:00
FallwinDs:你的vint1_index=3 但是vector size也是3 你還要印at(3) 10/18 22:01
bernachom:我有想過是在刪除-3之後可能會發生問題 10/18 22:02
bernachom:但是想不太出來怎麼解決.. 10/18 22:02
※ 編輯: bernachom 來自: 114.34.100.113 (10/18 22:03)
loveme00835:先寫出一個 "假裝看不到" 的作法, 之後再改成 "殺掉不 10/18 22:03
loveme00835:合條件的" 會比較好做 10/18 22:04
bernachom:謝謝各位幫忙,我來研究一下,感謝。 10/18 22:05