1. 程式人生 > >關於c++陣列與vector的區別

關於c++陣列與vector的區別

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,還是沒明白。。。