错误求解:不定义该运算符或到预定义运算符可接收的类型的转换

Jo3324 2018-12-04 07:16:59
程序要求是写一个能够求中位数的泛型函数,要求能够用在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;
}


}
...全文
724 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jo3324 2018-12-04
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错 的回复:
sort 函数要求 随机访问器,list不提供,所以sort无法使用 list,本身带有sort list.sort
原来如此。。。也就是说如果要对list和vector都能够进行排列的话只能自己写一个sort吗?
真相重于对错 2018-12-04
  • 打赏
  • 举报
回复
sort 函数要求 随机访问器,list不提供,所以sort无法使用
list,本身带有sort
list.sort

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧