2017-12-03 53 views
-3

我生成一系列隨機數並將它們推回到一個向量中。然後我想將它們逐一插入到鏈表中並打印出列表。但它總是拋出錯誤。 將一個數字有序地插入鏈表

#include"std_lib_facilities.h" 
#include <chrono> 

#define N 100 
int random_numbers() 
{ 
    random_device rd; //Will be used to obtain a seed for the random number engine 
    mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd() 
    uniform_int_distribution<> dis(0, N); 
    int a = 0; 
    a = dis(gen); 
    return a; 
} 

vector<int> randoms; 
void get_random_numbers() 
{ 
    for (int i = 0; i < N; i++) 
    { 
     randoms.push_back(random_numbers()); 
    } 
} 


void insert_in_lists() 
{ 

    list<int> l ; 
    for (int i = 0; i < N; i++) 
    { 
     list<int>::iterator it = l.begin(); 
     if (i = 0) 
     { 
      l.insert(it, randoms[i]); 
     } 
     else 
     { 
      for (list<int>::iterator p = l.begin(); p != l.end(); p++) 
      { 

       if (randoms[i]<= *p) 
       { 
        it = p; 
        //break; 
       } 
      } 
      l.insert(it, randoms[i]); 
     }  
    } 
    for (list<int>::iterator p = l.begin(); p != l.end(); p++) 
    { 

     cout << *p << endl; 
    } 
} 

int main() 
{ 
    get_random_numbers() 
    insert_in_lists(); 


    keep_window_open(); 
    return 0; 
} 

我想獲得像一系列有序號碼的:在Problem06未處理的異常在0x74F608B2: 1 2 2 2 3 4 5 6 6 6 6 6 7 ....... ERROR .exe:Microsoft C++異常:內存位置0x00EFF884的Range_error。

+2

你在哪裏調用'get_random_numbers'?在將數字放入數據之前,您似乎正在閱讀'randoms',這是**未定義的行爲**。 – Beta

+0

我編輯它,但仍然無法正常工作。 –

+0

'if(i = 0)'=是不是比較的賦值。把它改成'if(i == 0)' – drescherjm

回答

1

它是如此簡單得多:

#define N 100 

vector<int> get_random_numbers() 
{ 
    random_device rd; //Will be used to obtain a seed for the random number engine 
    mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd() 
    uniform_int_distribution<> dis(0, N); 

    vector<int> randoms(N); 
    for (int i = 0; i < N; i++) 
    { 
     randoms[i] = dis(gen); 
    } 
    return randoms; 
} 

void insert_in_lists() 
{ 
    vector<int> randoms = get_random_numbers(); 
    sort(randoms.begin(), randoms.end()); 
    list<int> l(randoms.begin(), randoms.end()); 
    for (list<int>::iterator p = l.begin(); p != l.end(); p++) 
    { 
     cout << *p << endl; 
    } 
} 

這樣,我們有效地構造和排序的載體,那麼它的值複製到列表中。這將更快,代碼更簡單。