如何修复错误:使用向量查找最小值和最大值进行合并排序

How do I fix errors: merge sort using vector finding minimum and maximum

本文关键字:最大值 排序 合并 最小值 向量查找 错误 何修复      更新时间:2023-10-16

我使用向量和合并排序来找到最小值和最大值,程序不断抛出错误。

void mergeSort(vector<int>& numList, vector<int> & minMax, int left, int right){
int mid;
if(left < right){
mid = (left + right) / 2;
mergeSort(numList, minMax, left, mid);
mergeSort(numList, minMax, mid + 1, right);
merge(numList, minMax, left, mid, right);
}
}
void merge(vector<int>& listNum, vector<int> & minMax, int start, int mid, int end){
int leftPos = start;
int rightPos = mid + 1;
int tempPos = start;
int* tempArr = new int[listNum.size()];
while(leftPos <= mid && rightPos <= end){
if(listNum[leftPos] < listNum[rightPos])
tempArr[tempPos++] = listNum[leftPos++];
else
tempArr[tempPos++] = listNum[rightPos++];
}
while(leftPos <= mid)
tempArr[tempPos++] = listNum[leftPos++];
while(rightPos <= mid)
tempArr[tempPos++] = listNum[rightPos++];
minMax.push_back(tempArr[0]); //store min
minMax.push_back(tempArr[end]); //store max
delete[] tempArr;
}
int main() {
vector<int> listOfNums;
vector<int> minAndMax;
int listOfNumsSize, minAndMaxSize;
cout<<"Enter a list of unsorted numbers separated by space (end by typing -1): "<<endl;
listOfNums = readNum ();
listOfNumsSize = listOfNums.size();
mergeSort(listOfNums, minAndMax, 0, listOfNumsSize - 1);
minAndMaxSize = minAndMax.size();
printNum (minAndMax, minAndMaxSize);
return 0;
}

以下是我经常犯的一些错误。

no type named 'value_type' in 'std::__1::iterator_traits<std::__1::vector<int, std::__1::allocator<int> > >'
typedef typename iterator_traits<_InputIterator1>::value_type __v1;
in instantiation of function template specialization 'std::__1::merge<std::__1::vector<int, std::__1::allocator<int> >, int, int>' requested here
merge(numList, minMax, left, mid, right);

问题是merge()在源文件中定义在mergeSort()之下。因此,当编译mergeSort()时,编译器会找到std::merge(),然后无法匹配参数。

因此,将merge()移动到mergeSort()之上或向前声明。

这就是using namespace std坏的原因。