void merge(vector<int> dst,vector<int> first,vector<int> second)
{
int i=0,j=0;
while(i<first.size()&&j<second.size())
{
if(first[i]<second[j])
{
dst.push_back(first[i]);
i++;
}
else
{
dst.push_back(second[j]);
j++;
}
}
while(i<first.size()
dst.push_back(first[i++]);
while(j<second.size())
dst.push_back(second[j++]);
}
void mergeSort(vector<int> &a)
{
size_t sz = a.size();
cin.get();
if(sz>1)
{
vector<int> first(&a[0],&a[sz/2]);
vector<int> second(&a[(sz/2)+1],&a[sz-1]);
mergeSort(first);
mergeSort(second);
merge(a,first,second);
}
}
void MergeSort(int* a,size_t size)
{
vector<int> s(&a[0],&a[size-1]);
mergeSort(s);
}
有人能帮我看看这段代码有什么问题吗?我收到 vector 下标超出范围错误。
最佳答案
如果 sz == 2,&a[(sz/2)+1]
将尝试获取 a[2] 的地址,这将给您带来此错误。
关于c++ - 为什么我在合并排序中出现 vector 下标超出范围错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3563173/