2017-12-03 1 views
-3

일련 번호를 생성하여 벡터로 푸시 백합니다. 그런 다음 링크 된 목록에 순서대로 순서대로 삽입하고 목록을 인쇄하려고합니다. 그러나 항상 오류가 발생합니다. Problem06에 0x74F608B2에서 처리되지 않은 예외 : 1 2 2 2 3 4 5 6 6 6 6 6 7 ....... ERROR : 링크 된 목록에 숫자를 순서대로 삽입하십시오.

#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는 정렬 같은 일련 번호를 얻을 싶어 .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; 
    } 
} 

이 방법은, 우리가 효율적으로 구성하고 분류 벡터를 다음 목록에 그 값을 복사합니다. 이것은 훨씬 빨라지고 코드는 훨씬 간단 해집니다.

관련 문제