2015-10-15 139 views
-2

你好,我寫了一個代碼,但如果我想運行代碼後,我輸入的代碼,它只是崩潰。 程序應該選擇矢量中的前10個,挑選最高的一個,並在此之前摧毀所有的東西,然後重新填充它,直到它再次變成十個長爲止。 我用一個for循環來做到這一點。我剛剛開始了這個2個月。輸入崩潰(C++)

#include <iostream> 
#include <algorithm> 
#include <vector> 
#include <iterator> 

using namespace std; 
int main() 
{ 
int Aantal; 
cin >> Aantal; 
vector<int> F(Aantal); 
for(int i=0; i<Aantal; i++) 
{ 
cin >> F[i]; 
    if(Aantal>1000) 
    { 
     cerr << "You're above 1000" << endl; 
     return -1; 
    } 
    if(Aantal<20) 
    { 
     cerr << "You're below 20" << endl; 
     return -1; 
    } 
    if(i>Aantal) 
     { 
      cerr << "Not above 'Aantal'" << endl; 
      return -1; 
     } 
    if(i<0) 
     { 
      cerr << "Not smaller than 0!" << endl; 
      return -1; 
     } 
} 
for(int z=0; z<Aantal; z++) 
{ 
if(z == 0){ 
    int a = 0; 
} 
int a; 
vector<int> arr(F.begin()+a, F.begin()+10+a); 
int c = *max_element(arr.begin(), arr.end()); 
cout << c << endl; 
vector<int>::iterator q; 
q = find(arr.begin(), arr.end(), c); 
int pos = distance(arr.begin(), q); 
arr.erase(arr.begin(),arr.begin()+pos); 
int a1 = 10-arr.size(); 
int b = a+a1; 
a = b; 
if(a+10>Aantal) 
    { 
    break; 
    } 
arr.erase(arr.begin(), arr.end()); 
+1

你能解釋一下這裏試圖做什麼嗎?對於(int z = 0; z arr(F.begin()+ a,F.begin()+ 10 + a);' – Pranjal

回答

0

你的問題是在這裏:

int a; 
vector<int> arr(F.begin()+a, F.begin()+10+a); 

您創建一個變量a,從來沒有初始化它,然後你用它來構建其載體。由於a有一個垃圾值,這將會導致向量的創建,因爲你很可能會得到錯誤的位置。

我對之前你正在做不知道,與:

for(int z=0; z<Aantal; z++) 
{ 
if(z == 0){ 
    int a = 0; 
} 

由於這一切都被設置a到零,然後你丟棄a,因爲它是在如果塊聲明。

+0

我想繼續計算該怎麼做?我需要一個用於刪除和重新填充矢量的解決方案。 – Bruce