我有一个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