有关c++的模板编程

飞天0407 2012-04-20 09:32:50

template <typename T> //T为传递容器的迭代器类型
typename T::value_type mostFre(T first,T last) //value_type指的是元素类型,该程序有错
{
allocator<typename T::value_type> alloc;
T newfirst=alloc.allocate(last-first); //此处错误
T newlast=newfirst+(last-first);

uninitialized_copy(first,last,newfirst);
sort(newfirst,newlast);
size_t maxOcc=0,curOcc=0;
T preIter=newfirst,maxOccit=newfirst;

while(newfirst!=newlast)
{
if(*newfirst!=*preIter)
{
if(curOcc>maxOcc)
{
maxOcc=curOcc;
maxOccit=preIter;
}
curOcc=0;
}
++curOcc;
preIter=newfirst;
++newfirst;
}

if(curOcc>maxOcc)
{
maxOcc=curOcc;
maxOccit=preIter;
}
return *maxOccit;
}

功能为返回一串序列出现的最频繁的值,高手帮看一看怎么不对。
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
evencoming 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
测试程序如下:

C/C++ code

int main()
{
int a[]={1,5,5,4,4,5,2,3};
vector<int> ivec(a,a+8);
vector<int>::iterator it;
int b=mostFre(ivec.begin(),ivec.end());

cout<<b<<endl;
……
[/Quote]
T newfirst=alloc.allocate(last-first); //此处错误
alloc是什么?
飞天0407 2012-04-20
  • 打赏
  • 举报
回复
测试程序如下:

int main()
{
int a[]={1,5,5,4,4,5,2,3};
vector<int> ivec(a,a+8);
vector<int>::iterator it;
int b=mostFre(ivec.begin(),ivec.end());

cout<<b<<endl;
return 0;
}
飞天0407 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你这是什么迭代器?
T是什么类型的时候出错的?
[/Quote]
书上说只支持vector容器,由于sort和allocate的存在。
所以只用vector进行的测试
evencoming 2012-04-20
  • 打赏
  • 举报
回复
你这是什么迭代器?
T是什么类型的时候出错的?

64,676

社区成员

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

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