關於c++陣列與vector的區別
阿新 • • 發佈:2018-12-22
emm,第一次寫部落格有點緊張。
今天刷藍橋杯碰到一個小問題,有一個測試點總是過不去,後來把程式碼裡的陣列換成vector向量後就解決了。題目是這樣的:
給定一個序列,每次詢問序列中第l個數到第r個數中第K大的數是哪個。
輸入格式
第一行包含一個數n,表示序列長度。
第二行包含n個正整數,表示給定的序列。
第三個包含一個正整數m,表示詢問個數。
接下來m行,每行三個數l,r,K,表示詢問序列從左往右第l個數到第r個數中,從大往小第K大的數是哪個。序列元素從1開始標號。
輸出格式
總共輸出m行,每行一個數,表示詢問的答案。
樣例輸入
5
1 2 3 4 5
2
1 5 2
2 3 2
樣例輸出
4
2
下面是我開始用陣列寫的程式碼:
#include <iostream> #include<algorithm> using namespace std; bool cmp(int a,int b){ return a>b; } int main() { int n; cin>>n; int a[n]; //這裡定義陣列 for(int i=0;i<n;i++){ cin>>a[i]; } int m; cin>>m; int result[m]; //又定義了一個數組 for(int i=0;i<m;i++){ int l,r,k; cin>>l>>r>>k; int *temp=new int [n]; for(int j = 0; j < n; j++) { temp[j] = a[j]; } sort(temp + l - 1, temp + r, cmp); result[i] = temp[l - 1 + k - 1]; delete [] temp; } for(int i=0;i<m;i++){ cout<<result[i]<<endl; } return 0; }
本來以為很完美了,但是問題是總是有那麼一個測試點過不去,而且我也沒法檢視測試資料,很難受,後來我將陣列換成向量試了下:
#include <iostream> #include<algorithm> #include<vector> using namespace std; bool cmp(int a,int b){ return a>b; } int main() { int n; cin>>n; vector<int> a(n); //諾,就是這裡,我把它換成了向量 for(int i=0;i<n;i++){ cin>>a[i]; } int m; cin>>m; vector<int> result(m); //這裡也換一下 for(int i=0;i<m;i++){ int l,r,k; cin>>l>>r>>k; int *temp=new int [n]; for(int j = 0; j < n; j++) { temp[j] = a[j]; } sort(temp + l - 1, temp + r, cmp); result[i] = temp[l - 1 + k - 1]; delete [] temp; } for(int i=0;i<m;i++){ cout<<result[i]<<endl; } return 0; }
居然測試成功了,百思不得其解。。。。。。
百度一下!!!!
emmmmm,還是沒明白。。。