我有一個vec_A
存儲的class A
實例爲:vec_A.push_back(A());
使用擦除刪除std向量的元素對象:a)內存處理和b)更好的方法?
我想在後面階段移除的矢量一些元素,有兩個問題:a)元素也將被刪除:vec_A.erase(iterator)
有任何額外的代碼我需要添加以確保沒有內存泄漏? 。
b)假設條件if(num <5)
是如果num在特定numberList中。鑑於此,是否有更好的方法來刪除矢量的元素比我在下面說明的要少?
#include<vector>
#include<stdio.h>
#include<iostream>
class A {
public:
int getNumber();
A(int val);
~A(){};
private:
int num;
};
A::A(int val){
num = val;
};
int A::getNumber(){
return num;
};
int main(){
int i =0;
int num;
std::vector<A> vec_A;
std::vector<A>::iterator iter;
for (i = 0; i < 10; i++){
vec_A.push_back(A(i));
}
iter = vec_A.begin();
while(iter != vec_A.end()){
std::cout << "\n --------------------------";
std::cout << "\n Size before erase =" << vec_A.size();
num = iter->getNumber() ;
std::cout << "\n num = "<<num;
if (num < 5){
vec_A.erase(iter);
}
else{
iter++;
}
std::cout << "\n size after erase =" << vec_A.size();
}
std::cout << "\nPress RETURN to continue...";
std::cin.get();
return 0;
}
爲什麼不'a.erase(標準::的remove_if(a.begin(),a.end() ,lessThan9),a.end());' – 2010-04-30 09:33:44
謝謝納文!這非常有用。 。另外,感謝Andreas的額外評論,我認爲Naveen已經更新了他的代碼 – memC 2010-04-30 09:55:29