读书人

有关STL的有关问题

发布时间: 2012-08-11 20:50:31 作者: rapoo

有关STL的问题
我使用vector容器,vector<char *>name,加进去一些数据元素之后(采用动态内存分配),调用erase()函数,我的问题是,erase()方法能够删除矢量中给定区间的元素,那么,这个“删除”是不是也就意味着delete掉我先前给name相应元素分配的内存?还是erase()能删除掉元素的信息但是不能清除它的内存?
如果erase()不能清除内存的话,是不是我另外需要用循环什么的来delete掉我动态分配的内存?希望各位能帮忙解答,尤其是第三个问题。

[解决办法]
erase()方法能够删除矢量中给定区间的元素(能),那么,这个“删除”是不是也就意味着delete掉我先前给name相应元素分配的内存?还是erase()能删除掉元素的信息但是不能清除它的内存?(后面一种说法是正确的。内存回收的工作要自己去完成,因为这种原因,通常不建议在vector中保存指针,而是直接保存对象,具体到楼主这个问题,用vector<string>name代替vector<char *>name应该可以很好地解决问题)
[解决办法]

C/C++ code
#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;} 

读书人网 >C++

热点推荐