未能推断出模板参数,求调试成功!

majiayefengkuanghaha 2011-04-27 09:32:52
#include <iostream>
#include <vector>
#include <functional>
#include <string>

using namespace std;

class A
{
public:
string name;
void print(ostream& out) const
{
out << name << endl;
}
};

ostream& operator<<(ostream& out, const A& a)
{
a.print(out);
return out;
}

template <typename T, typename T1>
const T& findMax(const vector<T> & a, T1 b = less<T1>)
{
int maxIndex = 0;
for(int i = 1; i != a.size(); ++i)
{
if(b(a[maxIndex], a[i]))
{
maxIndex = i;
}
}
return a[maxIndex];
}

class B
{
public:
bool operator()(const string& a, const string& b) const
{
return _stricmp(a.c_str(), b.c_str()) < 0;
}
};

int main()
{
vector<A> a(3);
a[0].name = "A";
a[1].name = "a";
a[2].name = "c";
cout << findMax(a) << endl;
cout << findMax(a,B()) << endl;
}
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-04-27
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <functional>
#include <string>

using namespace std;

class A
{
public:
string name;
void print(ostream& out) const
{
out << name << endl;
}

bool operator < (const A &a) const //
{
return name<a.name;
}
};

ostream& operator<<(ostream& out, const A& a)
{
a.print(out);
return out;
}

template <typename T,typename T1>
const T& findMax(const vector<T> & a, T1 b)//
{
int maxIndex = 0;
for(int i = 1; i != a.size(); ++i)
{
if(b(a[maxIndex], a[i]))
{
maxIndex = i;
}
}
return a[maxIndex];
}

template <typename T>
const T& findMax(const vector<T> & a)//
{
int maxIndex = 0;
less<T> b;

for(int i = 1; i != a.size(); ++i)
{
if(b(a[maxIndex], a[i]))
{
maxIndex = i;
}
}
return a[maxIndex];
}

class B
{
public:
bool operator()(const A& a, const A& b) const
{
return a.name<b.name ;
}
};

int main()
{
vector<A> a(3);
a[0].name = "A";
a[1].name = "a";
a[2].name = "c";
cout << findMax(a) << endl;
cout << findMax(a,B()) << endl;

return 0;
}


模板函数没有特化,没有默认模板参数,只能重载,而且默认less的话需要提供A的<。
  • 打赏
  • 举报
回复
晕死.原来是元素问题...
  • 打赏
  • 举报
回复
好的,我来结贴!
HeartWasNot 2011-04-27
  • 打赏
  • 举报
回复
用容器的模板是。。。貌似要用typename vector<T> a如此这般。。。。


PS:LZ该结贴了。。你这结贴率。。。没人愿意回答你的问题。。。

64,648

社区成员

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

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