Re: [問題] 刪除vector中 小於或等於0的數字

看板C_and_CPP作者 (十三)時間14年前 (2011/10/18 23:08), 編輯推噓2(204)
留言6則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《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

10/18 23:10, , 1F
抱歉,又Array又vec,原原po自行修改了。
10/18 23:10, 1F

10/18 23:16, , 2F
謝謝幫忙^_^
10/18 23:16, 2F

10/18 23:21, , 3F
這就是 std::remove_if() 在幹的事...
10/18 23:21, 3F

10/18 23:23, , 4F
唉,最近面試,主管說:演算法STL就做完了啊。好想哭。
10/18 23:23, 4F

10/24 11:12, , 5F
但是還是要懂原理.
10/24 11:12, 5F

10/24 11:42, , 6F
不必重新發明輪子,但我們必須知道如何發明輪子
10/24 11:42, 6F
文章代碼(AID): #1EdPPunu (C_and_CPP)
文章代碼(AID): #1EdPPunu (C_and_CPP)