qq_23908539 2015-10-31 05:41 采纳率: 87.5%
浏览 3165
已采纳

C++中vector的clear()的小问题

就是在我加注释的那一行
在刚创立vector的时候他不就是空的吗,为什么还需要clear()一下
我试了把这行代码删除,然后提交(原本是AC了)就TLE了
这是HD的1520,求教各位大神!

 #include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;

struct node{
    int is,no;
    int v;
    vector<int> son;
}a[6007];
int f[6007];
int n;
int max(int a,int b)
{
    return a>b?a:b;
}

void dfs(int x)
{
    for(int i = 0;i < a[x].son.size();i++) {
        int t = a[x].son[i];
        dfs(t);
        a[x].is += a[t].no;
        a[x].no += max(a[t].no,a[t].is);
    }
}

int main()
{
    while(~scanf("%d",&n))
    {
        memset(f,0,sizeof(f));
        for(int i = 1;i <= n;i++){
            scanf("%d",&a[i].v);
            a[i].son.clear();//这一行
            a[i].is = a[i].v;
            a[i].no = 0;
        }
        int son,fa;
        while(scanf("%d%d",&son,&fa) && son+fa) {
            a[fa].son.push_back(son);
            f[son] = 1;
        }
        for(int i = 1;i <= n;i++)
            if(!f[i]) {
                dfs(i);
                printf("%d\n",max(a[i].is,a[i].no));
                break;
            }
    }
    return 0;
}
  • 写回答

2条回答 默认 最新

  • Evankaka 博客专家认证 2015-10-31 06:03
    关注

    因为对于vector,clear并不真正释放内存(这是为优化效率所做的事),clear实际所做的是为vector中所保存的所有对象调用析构函数(如果有的话),然后初始化size这些东西,让你觉得把所有的对象清除了。。。

    真正释放内存是在vector的析构函数里进行的,所以一旦超出vector的作用域(如函数返回),首先它所保存的所有对象会被析构,然后会调用allocator中的deallocate函数回收对象本身的内存。。。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败