先来看个例子:
1 void display(vector<CTemp> vTemp) 2 { 3 for(unsigned int i = 0; i < vTemp.size(); i++) 4 { 5 cout << vTemp[i].getId() << ":" << vTemp[i].getType() << endl; 6 } 7 cout << "size:" << vTemp.size() << endl; 8 } 9 10 int main() { 33 vector<CTemp> vCtemp; 34 for(int i = 0; i < 10; i++) 35 { 36 CTemp temp1; 37 temp1.setId(i); 38 temp1.setType("int"); 39 vCtemp.push_back(temp1); 40 } 41 display(vCtemp); 42 43 for(vector<CTemp>::iterator it=vCtemp.begin();it!=vCtemp.end();) 44 { 45 if(it->getId() ==4 || it->getId() == 9) 46 { 47 cout << "before erase:" << it->getId() << " size:" << vCtemp.size() << endl; 48 vCtemp.erase(it); 49 //it=vCtemp.erase(it);结果是一样的,删除一个元素后,原来后边的元素向前移动,补上被删除掉的元素的位置,但内存是不释放的. 50 51 if(it != vCtemp.end()) //这句注掉,会发现最后打印出的id还是9,说明内存没有释放, 52 //最后it还是指向最后被删除的位置,它的值还存在。只是此时it的位置已经算是end了 53 { 54 cout << "after erase:" << it->getId() << " size:" << vCtemp.size() << endl; 55 } 56 } 57 else 58 { 59 it++; 60 } 61 } 62 cout << "vCtemp.end():" << vCtemp.end()->getId() << endl; 63 display(vCtemp); 64 65 return 0; 66 }程序执行的结果如下:0:int1:int2:int3:int4:int5:int6:int7:int8:int9:intsize:10before erase:4 size:10after erase:5 size:9before erase:9 size:9vCtemp.end():90:int1:int2:int3:int5:int6:int7:int8:intsize:8
如果将第51行注掉,则执行结果如下:
0:int1:int2:int3:int4:int5:int6:int7:int8:int9:intsize:10before erase:4 size:10after erase:5 size:9before erase:9 size:9after erase:9 size:8vCtemp.end():90:int1:int2:int3:int5:int6:int7:int8:intsize:8
转载于:https://www.cnblogs.com/mmmm/p/3419740.html
相关资源:JAVA上百实例源码以及开源项目