2017-12-03 11 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; 
} 

Iのようなソートされた数の一連の取得したい: 1 2 2 2 3 4 5 6 6 6 6 6 7 ....... ERROR:Problem06で0x74F608B2で未処理の例外を.exe:Microsoft C++例外:Range_error(メモリ位置0x00EFF884)。

+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; 
    } 
} 

この方法で、我々は効率的にベクターを構築し、並べ替え、リストにその値をコピーします。これははるかに高速になり、コードははるかに簡単です。

関連する問題