有关STL的问题
我使用vector容器,vector<char *>name,加进去一些数据元素之后(采用动态内存分配),调用erase()函数,我的问题是,erase()方法能够删除矢量中给定区间的元素,那么,这个“删除”是不是也就意味着delete掉我先前给name相应元素分配的内存?还是erase()能删除掉元素的信息但是不能清除它的内存?
如果erase()不能清除内存的话,是不是我另外需要用循环什么的来delete掉我动态分配的内存?希望各位能帮忙解答,尤其是第三个问题。
[解决办法]
erase()方法能够删除矢量中给定区间的元素(能),那么,这个“删除”是不是也就意味着delete掉我先前给name相应元素分配的内存?还是erase()能删除掉元素的信息但是不能清除它的内存?(后面一种说法是正确的。内存回收的工作要自己去完成,因为这种原因,通常不建议在vector中保存指针,而是直接保存对象,具体到楼主这个问题,用vector<string>name代替vector<char *>name应该可以很好地解决问题)
[解决办法]
#include <iostream>#include <vector>using namespace std;int main(void) { vector<char*> vec; char *p; for (int i=0;i<5;i++) { p = new char[5]; strcpy(p,"wwww"); vec.push_back(p); } for(vector<char*>::iterator it = vec.begin();it!=vec.end();++it) printf("%s\n",*it); for(vector<char*>::iterator it = vec.begin();it!=vec.end();++it) { p = *it; delete[] p; } vec.clear(); return 0;}