• 全部
  • 问答

请教一道简单的题目

jp1984 2004-03-15 11:00:06
如何有递归函数r_reverseOutput() 按归反的顺序输出迭代器范围[first,last)的元素。template<typename T>
void r_reverseOutput(list<T>::iterator first,list<T>::iterator last)
...全文
73 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gameboy007 2004-03-21
你的意思是否这样

#include <iostream>
#include <list>

using namespace std;

template<typename T>
void r_reverseOutput(typename list<T>::iterator first, typename list<T>::iterator last)
{
while (true) {
swap(*first, *--last);
if (first == last)
break;
else if (++first == last)
break;
}
}

int main()
{
int v[] = { 1,2,3,4,5 };
list<int> a(v,v+sizeof(v)/sizeof(v[0]));

r_reverseOutput<int>(a.begin(), a.end());

list<int>::iterator beg(a.begin());
while (beg != a.end())
cout << *beg++ << " ";

system("PAUSE");
}
回复
jp1984 2004-03-21
强!!!对了,就是这个意思。。。给分给分了!!
回复
jp1984 2004-03-20
对的 啊,就是把原来表中元素反序存放。。至少要调用本身吧。。你的程序我为什么就看不明白呢
回复
gameboy007 2004-03-20
你所指的递归是否是return一個反須序的容器?
回复
jp1984 2004-03-20
这哪里用到递归了?????
回复
gameboy007 2004-03-20
你所说的停止条件是是range[begin,end)?
我当是的话就是以下这样:
template<typename T>
void r_reverseOutput(list<T>::reverse_iterator first,list<T>::reverse_iterator last)
{
while (first != last) {
first->DoSomthing(); 对各个元素實行其调用
if (*first == condition) 達到停止条件後离开while loop
break;
++first;
}
first->DoOther();
}

如果你所说的停止条件是要找到其元素後就停止的話,应该用find例如:
list<T>::iterator itr(find(ctr.rbegin(), ctr.rend(), T_value));

回复
jp1984 2004-03-17
有没有人顶?? 解决就加分……
回复
gameboy007 2004-03-16
template<typename T>
void r_reverseOutput(list<T>::reverse_iterator first,list<T>::reverse_iterator last)
{
}

调用
reverseOutput(container.rbegin(), container.rend());


回复
jp1984 2004-03-16
没有停止条件?????
回复
jp1984 2004-03-16
是课后练习啊, WILLAM TOPP 和WILLIAM FORD 那本经典的《DATA STRUCTURE ,C++描述,USING STL》上的联系,真的不难,但是我一点思路都没有,为什么这么长时间了还是没有人来解决 。。我现在就在找那个停止条件。 用什么算法来实现的问题。。模型建不起来。
回复
dahan2005 2004-03-16
很复杂呀!关注
回复
congliu 2004-03-15
在传入参数时,用list的对象的rbegin()和rend()即可
回复
发帖
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-03-15 11:00
社区公告
暂无公告