vector如何根据索引删除一个元素?

booirror 2014-02-16 04:20:54

如果我这么写
vec.erase(vec.begin()+idx);

有木有问题?
谢谢
...全文
2072 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
十六夜月 2016-08-26
  • 打赏
  • 举报
回复
引用 1 楼 taodm 的回复:
还是买本《effective stl》认真啃啃吧。 啃了就stl的问题都自解了。
就这种人最2,你知道就告诉人家,不知道就说不知道,拿不准就说拿不准,知道不像告诉人家就告诉他你不想告诉他, 跟这有的没的瞎jb扯淡
alex_my 2014-02-17
  • 打赏
  • 举报
回复
如果容器里边存放的是指针,要记得把指针所指向的内存释放了。(不记各种智能指针什么的)
xiaohuh421 2014-02-17
  • 打赏
  • 举报
回复
只要自己保证不越界, 那就是没有问题的.
xiaohuh421 2014-02-17
  • 打赏
  • 举报
回复
vector窗口只会释放vector自己内部申请的内存, 而不管程序自己申请的内存. 比如你的vector中保存new出来的指针. 那么vector在erase的时候就只释放这个指针占的4字节内存, 而指针指向的内存它是不会释放的.
Xomic 2014-02-17
  • 打赏
  • 举报
回复
erase删除元素,不释放内存 你看看capacity(),和size()的值就知道了!
richyhuang 2014-02-17
  • 打赏
  • 举报
回复
只是在vector里面被清除掉了,其本身还是是否存在其实就看这个对象开始从哪里来的吧
mujiok2003 2014-02-17
  • 打赏
  • 举报
回复
引用 8 楼 booirror 的回复:
[quote=引用 6 楼 mujiok2003 的回复:] [quote=引用 4 楼 booirror 的回复:] 我担心的是有木有真正删除了
如果是对象, 它会被析构,但是未必会释放内存。 [/quote] 被析构了,咋就没释放内存?[/quote] 跟vector的内存管理有关。
derekrose 2014-02-16
  • 打赏
  • 举报
回复
安全性略差...
booirror 2014-02-16
  • 打赏
  • 举报
回复
引用 6 楼 mujiok2003 的回复:
[quote=引用 4 楼 booirror 的回复:] 我担心的是有木有真正删除了
如果是对象, 它会被析构,但是未必会释放内存。 [/quote] 被析构了,咋就没释放内存?
zhuobattle 2014-02-16
  • 打赏
  • 举报
回复
如果是循环里面erase是要注意下一个下标
mujiok2003 2014-02-16
  • 打赏
  • 举报
回复
引用 4 楼 booirror 的回复:
我担心的是有木有真正删除了
如果是对象, 它会被析构,但是未必会释放内存。
mujiok2003 2014-02-16
  • 打赏
  • 举报
回复

if(idx <= vec.size())
{
   vec.erase(vec.begin() + idx);
}
booirror 2014-02-16
  • 打赏
  • 举报
回复
我担心的是有木有真正删除了
vipcxj 2014-02-16
  • 打赏
  • 举报
回复
木有问题,begin()返回的是下标0位置的迭代器,而vector的迭代器是支持+个数字的操作的。不过其他容器就不一定了,主要看那些容器的迭代器支不支持加法运算
Pump天天学习 2014-02-16
  • 打赏
  • 举报
回复
单就这一句代码来说没啥问题taodm每次回复都会推销一本书
taodm 2014-02-16
  • 打赏
  • 举报
回复
还是买本《effective stl》认真啃啃吧。 啃了就stl的问题都自解了。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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