使用STL容器要注意判斷容器是否為空
阿新 • • 發佈:2022-02-20
這次主要是在使用vector時發現的,而priority_queue
、queue
、stack
等就不多說了,肯定要使用empty
函式判斷是否為空。
本次在做 PAT甲級 1097 Deduplication on a Linked List (25 分)時發現的錯誤
原本在輸出時沒有使用if (l1.size()>0)
和if (l1.size()>0)
,序號為2的點出現了段錯誤
以下為原本程式碼(出現段錯誤的程式碼)
#include<iostream> #include<cmath> #include<vector> using namespace std; const int maxn=1e7+10; struct node{ int addr; int key; int next; }p[maxn]; bool is[maxn]; vector<node> l1,l2; int main(){ int n,s1,s2; scanf("%d%d",&s1,&n); int addr,key,next,tmp,ti; for (int i=0;i<n;i++){ scanf("%d",&addr); scanf("%d%d",&p[addr].key,&p[addr].next); p[addr].addr=addr; } int count=0; for (int i=s1;i!=-1;i=p[i].next){ count++; if (is[abs(p[i].key)]==false){ is[abs(p[i].key)]=true; //p[i].addr=i; //p[i].flag=1; l1.push_back(p[i]); } else{ l2.push_back(p[i]); } } //printf("%d %d %d\n",count,l1.size(),l2.size()); //if (l1.size()>0){ for (int i=0;i<l1.size()-1;i++){ printf("%05d %d %05d\n",l1[i].addr,l1[i].key,l1[i+1].addr); } printf("%05d %d -1\n",l1[l1.size()-1].addr,l1[l1.size()-1].key); //} //if (l2.size()>0){ for (int i=0;i<l2.size()-1;i++){ //printf("%d\n",l2.size()-1); printf("%05d %d %05d\n",l2[i].addr,l2[i].key,l2[i+1].addr); } printf("%05d %d -1\n",l2[l2.size()-1].addr,l2[l2.size()-1].key); //} return 0; }
以下為AC程式碼
#include<iostream> #include<cmath> #include<vector> using namespace std; const int maxn=1e7+10; struct node{ int addr; int key; int next; }p[maxn]; bool is[maxn]; vector<node> l1,l2; int main(){ int n,s1,s2; scanf("%d%d",&s1,&n); int addr,key,next,tmp,ti; for (int i=0;i<n;i++){ scanf("%d",&addr); scanf("%d%d",&p[addr].key,&p[addr].next); p[addr].addr=addr; } int count=0; for (int i=s1;i!=-1;i=p[i].next){ count++; if (is[abs(p[i].key)]==false){ is[abs(p[i].key)]=true; //p[i].addr=i; //p[i].flag=1; l1.push_back(p[i]); } else{ l2.push_back(p[i]); } } //printf("%d %d %d\n",count,l1.size(),l2.size()); if (l1.size()>0){ for (int i=0;i<l1.size()-1;i++){ printf("%05d %d %05d\n",l1[i].addr,l1[i].key,l1[i+1].addr); } printf("%05d %d -1\n",l1[l1.size()-1].addr,l1[l1.size()-1].key); } if (l2.size()>0){ for (int i=0;i<l2.size()-1;i++){ //printf("%d\n",l2.size()-1); printf("%05d %d %05d\n",l2[i].addr,l2[i].key,l2[i+1].addr); } printf("%05d %d -1\n",l2[l2.size()-1].addr,l2[l2.size()-1].key); } return 0; }