作者bleed1979 (十三)
看板C_and_CPP
標題Re: [問題] 刪除vector中 小於或等於0的數字
時間Tue Oct 18 23:08:36 2011
※ 引述《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