- 主题:一个函数,要根据传递的迭代器类型进行正向或者反向遍历怎么写
这个函数里面的操作都是一样,不同的是,在有些地方调用这个函数需要对一个 MAP 进行正向遍历,有些地方调用该函数时需要对齐进行反向遍历。
不想写重复代码,有办法一个版本搞定吗?
--
FROM 184.72.30.*
传进来iterator,就正向
传进来reverse iterator,就反向?
--
FROM 123.118.191.*
参数咋写?弄两个参数类型一个正向一个反向?
然后遍历的时候,根据类型写两套代码?如果是这样,和写两个版本的函数没啥区别了。
【 在 z16166 的大作中提到: 】
: 传进来iterator,就正向
: 传进来reverse iterator,就反向?
--
FROM 184.72.30.*
一套代码吧,不管传入的迭代器是啥,只管++就行
模板函数
template<typename T, typename F>
void traverse(T begin, T end, F f) {
std::for_each(begin, end, f);
}
或者直接用std::for_each、std::transform
正向:std::for_each(data.begin(), data.end(), f);
反向:std::for_each(data.rbegin(), data.rend(), f);
【 在 speedboy2998 的大作中提到: 】
: 参数咋写?弄两个参数类型一个正向一个反向?
: 然后遍历的时候,根据类型写两套代码?如果是这样,和写两个版本的函数没啥区别了。
:
--
修改:z16166 FROM 123.118.191.*
FROM 123.118.191.*
还要检查 rend 或者 end 来判断是否结束了。。
for (; it != m.end(); ++it);
VS
for (; it != m.rend(); ++it);
【 在 z16166 的大作中提到: 】
: 一套代码吧,不管传入的迭代器是啥,只管++就行
: 模板函数
:
--
FROM 184.72.30.*
我更新了帖子
【 在 speedboy2998 的大作中提到: 】
: 还要检查 rend 或者 end 来判断是否结束了。。
: for (; it != m.end(); ++it);
: VS
: ...................
--
FROM 123.118.191.*
谢谢,我试试。
【 在 z16166 的大作中提到: 】
: 我更新了帖子
:
--
FROM 218.76.62.*
template<typename ITERATOR>
void foo(ITERATOR begin, ITERATOR end)
【 在 speedboy2998 的大作中提到: 】
: 这个函数里面的操作都是一样,不同的是,在有些地方调用这个函数需要对一个 MAP 进行正向遍历,有些地方调用该函数时需要对齐进行反向遍历。
: 不想写重复代码,有办法一个版本搞定吗?
--
FROM 185.203.219.*