먼저 알고리즘 및 C++에서 새로운 것입니다. vim에서이 코드를 작성한 후이 C++ 코드를 디버깅 할 때 error:std:out_of_range
을 만났고 오류가 어디에 있는지 전혀 알지 못합니다. 그래서 여기에 나는, 나는 당신의 help.thxstd : out_of_range in mergesort
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cmath>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
void merge(vector<int> &a, int first, int mid, int last)
{
a.resize(last - first + 1);
int n1 = mid - first + 1;
int n2 = last - mid;
vector<int> larray(n1, 0);
vector<int> rarray(n2, 0);
for (int i = 0; i != n1; ++i)
larray.at(i) = a.at(first + i);
for (int i = 0; i != n2; ++i)
rarray.at(i) = a.at(mid + 1 + i);
int i = 0;
int j = 0;
int k = 0;
while (i < n1 && j < n2)
{
if (larray.at(k) <= rarray.at(i))
a[k++] = larray[i++];
else
a[k++] = rarray[j++];
}
while (i < n1)
a[k++] = larray[i++];
while (j < n2)
a[k++] = rarray[j++];
}
void MegerSort(vector<int> &a, int first, int last)
{
if (first < last)
{
int mid = (first + last)/2;
MegerSort(a, first, mid);
MegerSort(a, mid + 1, last);
merge(a, first, mid, last);
}
}
int main()
{
vector<int> array;
srand(unsigned(time(0)));
for (int i = 0; i != 10; ++i)
array.push_back(rand() % 10);
for (vector<int>::iterator it = array.begin(); it != array.end(); ++it)
cout<<*it<<" ";
cout<<endl;
MegerSort(array, 0, 9);
for (vector<int>::iterator it = array.begin(); it != array.end(); ++it)
cout<<*it<<" ";
return 0;
}
당신이 어떤 라인을 얻을 수 있습니까 참조
rarray.at(i) = a.at(mid + 1 + i);
problem- 될 것입니다 그 오류는? –@ LuchianGrigore이 컴파일러는이 코드를 gcc로 오류없이 컴파일하지만 .exe 파일을 실행할 때 오류 메시지가 표시됩니다. – skyline09
그럼 실제로 디버깅하지 않았습니까? 닫는 투표 ... –