程序要求是写一个能够求中位数的泛型函数,要求能够用在vector和list上,自己写的函数测试可以用在vector上了,但是用在list上时出现了这些错误:
测试时是直接把main函数里的vector全部改成了list,看错误内容好像是泛型函数里的sort函数出了问题,但是不太清楚是什么造成的,求大神解答
主程序在这里:
#include "pch.h"
#include <iostream>
#include<vector>
#include<list>
#include <algorithm>
using namespace std;
template<class T,class For>
double median(For,For,T );
int main()
{
list<int> iv = { 1, 2, 3, 4, 5, 6, 7 };
list<double> dv = { 1.5,2.5,3.5,4.5,5.5,6.5 };
list<int>::iterator it_i;
list<double>::iterator it_d;
for (it_i = iv.begin(); it_i!=iv.end(); it_i++) {
cout << *it_i << " ";
}
cout << endl;
for (it_d = dv.begin(); it_d!=dv.end(); it_d++) {
cout << *it_d << " ";
}
cout << endl;
double im=0,dm=0;
im = median(iv.begin(),iv.end(),im);
dm = median(dv.begin(),dv.end(),dm);
cout << im << endl;
cout << dm << endl;
for (it_i = iv.begin(); it_i != iv.end(); it_i++) {
cout << *it_i << " ";
}
cout << endl;
for (it_d = dv.begin(); it_d != dv.end(); it_d++) {
cout << *it_d << " ";
}
cout << endl;
}
模板函数在这里:
template<class T,class For>
double median(For begin,For end,T t) {
int size=0 ;
for (For i = begin; i != end; i++) {
size++;
}
if (size == 0)
throw domain_error("median of an empty vector");
sort(begin, end);
if (size % 2 == 0) {
T mid1, mid2;
For temp1 = begin; For temp2 = begin;
int half = size / 2;
for (int i = 1; i < half; i++) {
temp1++;
temp2++;
}
temp2++;
mid1 = *temp1;
mid2 = *temp2;
return (mid1+mid2)/2 ;
}
else {
T mid;
For temp = begin;
int half = size / 2;
for (int i = 1; i <= half; i++) {
temp++;
}
mid = *temp;
return mid;
}
}