程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-C++中vector的clear()的小問題

c++-C++中vector的clear()的小問題

編輯:編程綜合問答
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;
}

最佳回答:


因為對於vector,clear並不真正釋放內存(這是為優化效率所做的事),clear實際所做的是為vector中所保存的所有對象調用析構函數(如果有的話),然後初始化size這些東西,讓你覺得把所有的對象清除了。。。

真正釋放內存是在vector的析構函數裡進行的,所以一旦超出vector的作用域(如函數返回),首先它所保存的所有對象會被析構,然後會調用allocator中的deallocate函數回收對象本身的內存。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved