求教一个嵌套vector的内存释放问题

xixiahouyi 2014-02-27 02:09:42
比如我定义了一个 vector<vector<int>> x=vector<vector<int>>(size,vector<int>());
我在第一层earse掉了其中的几个元素,怎么释放earse掉的vector的内存,求大神赐教!!!
...全文
611 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sniffer12345 2014-02-27
  • 打赏
  • 举报
回复
引用 6 楼 xixiahouyi 的回复:
引用 2 楼 xixiahouyi 的回复:
[quote=引用 1 楼 jianwen0529 的回复:] 先earse内层,再earse外层!
earse 是不释放内存的 仅仅清理数据
我的vector是全局存在的 程序会不断向里面添加和删除数据 就是内存释放不出来 很烦 [/quote] 你vector里头加的是指针还是数据? 如果是数据的话,那你要烦恼什么?会占用那么多内存吗?你的数据有多大? 另外vector内部是有内存池的,使用的内存会慢慢上涨,但大多数时候是不影响应用的。 如果你真的头痛vector占用内存多,而且你的元素数量又不是很多的话,那你必须要考虑在vector中存放指针。那你最好用shared_ptr去管理,否则很容易泄露
漫步者、 2014-02-27
  • 打赏
  • 举报
回复
引用 楼主 xixiahouyi 的回复:
比如我定义了一个 vector<vector<int>> x=vector<vector<int>>(size,vector<int>()); 我在第一层earse掉了其中的几个元素,怎么释放earse掉的vector的内存,求大神赐教!!!
同样的道理,你都知道怎么删除第一层的,一样的步骤去删除下一层的数据
Xomic 2014-02-27
  • 打赏
  • 举报
回复
用vector<vector<int>>().swap(V)试试;
dahaiI0 2014-02-27
  • 打赏
  • 举报
回复
__cc__ 2014-02-27
  • 打赏
  • 举报
回复
引用 8 楼 vipcxj 的回复:
不需要释放,你里面的数据都是对象,会被自动释放,如果你里面放的是new出来的指针,才需要你手动清理
你没看清楚,他这是塞的东西太多了,希望运行的时候释放掉,肯定不能等自动释放了
vipcxj 2014-02-27
  • 打赏
  • 举报
回复
不需要释放,你里面的数据都是对象,会被自动释放,如果你里面放的是new出来的指针,才需要你手动清理
__cc__ 2014-02-27
  • 打赏
  • 举报
回复
引用 6 楼 xixiahouyi 的回复:
引用 2 楼 xixiahouyi 的回复:
[quote=引用 1 楼 jianwen0529 的回复:] 先earse内层,再earse外层!
earse 是不释放内存的 仅仅清理数据
我的vector是全局存在的 程序会不断向里面添加和删除数据 就是内存释放不出来 很烦 [/quote] 所以说使用指针嘛,为啥视我的回答不见呢? vector<vector<int>*> ....,这样你不需要哪个,直接delete
xixiahouyi 2014-02-27
  • 打赏
  • 举报
回复
引用 2 楼 xixiahouyi 的回复:
引用 1 楼 jianwen0529 的回复:
先earse内层,再earse外层!
earse 是不释放内存的 仅仅清理数据
我的vector是全局存在的 程序会不断向里面添加和删除数据 就是内存释放不出来 很烦
幻夢之葉 2014-02-27
  • 打赏
  • 举报
回复
引用 2 楼 xixiahouyi 的回复:
引用 1 楼 jianwen0529 的回复:
先earse内层,再earse外层!
earse 是不释放内存的 仅仅清理数据
你不是指针也没必要这样子做啊,除非你认为你数据量很大,严重耗损内存! 如果你是把整个vector删除完的话,写一个函数,跟一个空的vector进行交换,被交换的那个vector得到你原来的内存,函数退出就释放掉了! 如果你只是删除某个元素就不必把内存变小了吧?!如果要也差不多,建一个vector,resize大小,然后交换,不过这样不值得!!
wb_rock 2014-02-27
  • 打赏
  • 举报
回复
释放遵循有内到外,只有vector存的是指针时才需要释放,其它不需要释放
__cc__ 2014-02-27
  • 打赏
  • 举报
回复
引用 2 楼 xixiahouyi 的回复:
引用 1 楼 jianwen0529 的回复:
先earse内层,再earse外层!
earse 是不释放内存的 仅仅清理数据
这种编码方式不太好,最后vector内部使用指针了。不过既然你使用了vector保存vector,不要担心内存泄露的问题,当你外部的vector析构的时候,内部的vector也会析构的。不过你要想主动删除其内存,那就只能调用vector清理内存的方法,可惜木有啊。
xixiahouyi 2014-02-27
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
先earse内层,再earse外层!
earse 是不释放内存的 仅仅清理数据
幻夢之葉 2014-02-27
  • 打赏
  • 举报
回复
先earse内层,再earse外层!

64,637

社区成员

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

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