有关vector中的erase()

thulongkang 2012-07-17 03:48:42
如下代码是在vector容器中装入指针元素:
vector<object*> vec;//object是已经定义好的一个类
object *p;
for (int i=0;i<5;i++)
{
p = new object;
.....//给每个元素加上一些东西,例如标号等
vec.push_back(p);
}
现在,我想使用vec.erase[a,b]来来删除区间的元素,(并没有释放内存的意思),如果我给vec中的每个元素顺序加上不同的标号(暂且用数字来区别:1,2,3,4,5.....),那么,我使用vec.erase(vec.begin(),vec.begin+1)是不是在这个容器中就把vec.begin()的信息消除了?(没有释放内存的意思~)
或者能否这样说,有了这行代码,是不是原来的vec.begin()的数据不能被访问(被清除),但是它所占据的内存仍在当初给vec分配的内存中,而现在的vec.begin()变成了原来的vec.begin()+1?????
vec的长度减少了?
如果我erase()的区间在别的地方呢?
...全文
147 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baichi4141 2012-07-18
  • 打赏
  • 举报
回复
只要还有指针指着你申请出来的那块内存,就可以通过它删掉,指向相同空间的指针留一个就可以,剩下的随便删
如果所有指着那块内存的指针都被你抛弃了,那就等程序结束操作系统自动回收吧
thulongkang 2012-07-18
  • 打赏
  • 举报
回复
是啊,我利用vector储存的对象恰好是指针,而且涉及动态内存分配~

我的问题仅仅是采用建立副本的方式可不可以??
竞天问 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 3 楼 的回复:

引用 1 楼 的回复:

vector的尺寸是不是减少了?


做个简单的实验就清楚啦
嗯,是的,做实验这个方法不错!
还有一个问题是,在调用erase()之后,我如果想delete掉动态分配的内存,该怎么干?????、急!!
[/Quote]

vector不需要你关心内存的事儿,除非你存储的对象需要关心
thulongkang 2012-07-17
  • 打赏
  • 举报
回复
也就是说,先用erase()擦除数据,再删除内存行不行?
thulongkang 2012-07-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:

vector的尺寸是不是减少了?


做个简单的实验就清楚啦
[/Quote]嗯,是的,做实验这个方法不错!
还有一个问题是,在调用erase()之后,我如果想delete掉动态分配的内存,该怎么干?????、急!!
竞天问 2012-07-17
  • 打赏
  • 举报
回复
标准好像(我记不清了)是说:删除一个元素后,原来后边的元素向前移动,补上被删除掉的元素的位置。空出来的空间是在后边,但内存是不释放的
pathuang68 2012-07-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

vector的尺寸是不是减少了?
[/Quote]

做个简单的实验就清楚啦
ForestDB 2012-07-17
  • 打赏
  • 举报
回复
是。
感兴趣可以系统的看看STL的源码。
thulongkang 2012-07-17
  • 打赏
  • 举报
回复
vector的尺寸是不是减少了?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧