2017-12-03 1 views
-3

Ich erzeuge eine Reihe von Zufallszahlen und schiebe sie in einen Vektor zurück. Dann möchte ich sie geordnet in eine verkettete Liste einfügen und die Liste ausdrucken. Es wird jedoch immer Fehler ausgegeben. fügen Sie eine Ordnungszahl in eine verkettete Liste ein

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

Ich möchte, eine Reihe von sortierten Anzahl bekommen: 1 2 2 2 3 4 5 6 6 6 6 6 7 ....... ERROR: Unbehandelte Ausnahme bei 0x74F608B2 in Problem06 .exe: Microsoft C++ - Ausnahme: Range_error am Speicherort 0x00EFF884.

+2

Wo rufst du 'get_random_numbers' an? Sie scheinen "Randoms" zu lesen, bevor Sie Zahlen eingeben, was ** undefiniertes Verhalten ** bedeutet. – Beta

+0

Ich habe es bearbeitet, funktioniert aber immer noch nicht. –

+0

'if (i = 0)' = ist eine Zuweisung kein Vergleich. ändere das zu "if (i == 0)" – drescherjm

Antwort

1

Es ist so viel einfacher:

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

Auf diese Weise können wir effizient den Vektor konstruieren und sortieren, kopieren Sie dann in die Liste seiner Werte. Dies wird viel schneller und der Code ist viel einfacher.

Verwandte Themen