请高手们确认该题是否有问题,如果没问题,请帮我实现好吗?

LoveyuerForever 2004-01-05 09:02:36
题目如下:
利用这个函数:(原型如下)
template<typename T>
list<T>::iterator seqSearch( list<T>::iterator first, list<T>::iterator last, const T& target)
实现下面函数:
template<typename T>
int count( const list<T>& aList, const T& item) 统计表aList中item出现的次数. 算法也比较简单:就是重复使用seqSearch()函数从表aList中查找item,直到
seqSearch()返回 aList.end().
可以无法通过编译!老出现 const_iterator到 iterator的转换问题!
...全文
29 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xueweizhong 2004-01-05
  • 打赏
  • 举报
回复
呵呵,把最后的结果再贴一下:

#include <list>
using std::list;
//利用这个函数:(原型如下)
template<typename T>
typename list<T>::iterator seqSearch(
typename list<T>::iterator first,
typename list<T>::iterator last,
const T& target
);
// 实现下面函数:
template<typename T>
int count( const list<T>& aList, const T& item);

/*
统计表aList中item出现的次数.
算法也比较简单:
就是重复使用seqSearch()函数从表aList中查找item,
直到seqSearch()返回 aList.end().可以无法通过编译!
老出现 const_iterator到 iterator的转换问题!
*/

template<typename T>
int count( const list<T>& aList, const T& item)
{
list<T>& caList = const_cast<list<T>&>(aList);

int result = 0;
typename list<T>::iterator iter = caList.begin();
while (
(iter = seqSearch(iter, caList.end(), item))
!= aList.end()
)
{
++result;
++iter;
}
return result;
}

int main()
{
list<int> l;
count(l, 10);
}

前面的程序因为函数模板没有实例化,导致
编译器查错有限。
xueweizhong 2004-01-05
  • 打赏
  • 举报
回复
》 typename list<T>::const_iterator iter;
》 while (
》 (iter = seqSearch(caList.begin(), caList.end()))
》 != aList.end()
》 )

这几行执行语义上有些问题,应该是:

typename list<T>::const_iterator iter = caList.begin();
while (
(iter = seqSearch(iter, caList.end(), item))
!= aList.end()
)
{
++count;
++iter;
}
xueweizhong 2004-01-05
  • 打赏
  • 举报
回复
我帮你改了一下,下面的程序在
VC7.1 g++3.3.1 cbuilder6
编译器上编译通过:

#include <list>
using std::list;
//利用这个函数:(原型如下)
template<typename T>
typename list<T>::iterator seqSearch(
typename list<T>::iterator first,
typename list<T>::iterator last,
const T& target
);
// 实现下面函数:
template<typename T>
int count( const list<T>& aList, const T& item);

/*
统计表aList中item出现的次数.
算法也比较简单:
就是重复使用seqSearch()函数从表aList中查找item,
直到seqSearch()返回 aList.end().可以无法通过编译!
老出现 const_iterator到 iterator的转换问题!
*/

template<typename T>
int count( const list<T>& aList, const T& item)
{
list<T> const& caList = const_cast<list<T> const&>(aList);

int result = 0;
typename list<T>::const_iterator iter;
while (
(iter = seqSearch(caList.begin(), caList.end()))
!= aList.end()
)
{
++count;
}
return count;
}
RedSunRS 2004-01-05
  • 打赏
  • 举报
回复
Show me your source code, please.
sharkhuang 2004-01-05
  • 打赏
  • 举报
回复
:)
jawibn 2004-01-05
  • 打赏
  • 举报
回复
list<T>::iterator first中间的空格好不好呀,解释一下行吗:-)

64,654

社区成员

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

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