看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《bernachom (Terry)》之銘言: : 開發平台(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。 : 不知道有什麼辦法可以解決呢? : 謝謝幫忙 硬幹的時間又到了。 O(n)的做法。 給定兩個index i, j。i 負責 > 0 的數,j 負責迭代每一個元素。 1.如果 j 碰到 > 0 的數, Array[i] = Array[j]; ++i; ++j; 2.否則 ++j; 3.j == size 跳出迴圈, vector resize i 虛擬碼: int i = 0, j = 0, sz = vec.size(); while(j < sz) { if(Array[j] > 0) { Array[i++] = Array[j]; } ++j; } vec.resize(i); 報告完畢! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.115.147
bleed1979:抱歉,又Array又vec,原原po自行修改了。 10/18 23:10
bernachom:謝謝幫忙^_^ 10/18 23:16
loveme00835:這就是 std::remove_if() 在幹的事... 10/18 23:21
bleed1979:唉,最近面試,主管說:演算法STL就做完了啊。好想哭。 10/18 23:23
angleevil:但是還是要懂原理. 10/24 11:12
xatier:不必重新發明輪子,但我們必須知道如何發明輪子 10/24 11:42