免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5611 | 回复: 6
打印 上一主题 下一主题

[C++] 这个模板函数里的“T::iterator it;”什么意思? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-03 22:44 |只看该作者 |倒序浏览
下面代码里的“T::iterator it;”什么意思,是定义迭代变量么?T::iterator 是数据类型?在哪定义这个数据类型了???以前没见到C++里这么定义变量

template<class T>
void print(T &deq, char *str)
{
        T::iterator it;
        cout<<"The elements of "<<str<<": ";
        for(it=deq.begin();it!=deq.end();it++)
        {   cout<<*it<<" ";        }
        cout<<endl;
}

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2012-10-03 22:47 |只看该作者
要求T里定义了此类型。

上面代码可能要改为  typename T::iterator it;

论坛徽章:
0
3 [报告]
发表于 2012-10-03 22:50 |只看该作者
群雄逐鹿中原 发表于 2012-10-03 22:47
要求T里定义了此类型。

上面代码可能要改为  typename T::iterator it;


如果T是deque类型,deque容器的iterator类型怎么定义的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2012-10-03 23:37 |只看该作者
cppfans6 发表于 2012-10-03 22:50
如果T是deque类型,deque容器的iterator类型怎么定义的?


这个我也不知哎,各种实现有不同的做法。

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:32:30
5 [报告]
发表于 2012-10-03 23:58 |只看该作者
iterator 是一种设计模式,它的涵义是容器内指向元素的指针;stl的各个容器都有iterator,并且可以通过iterator从begin()开始,到end()结束遍历容器内的每个元素。

template<class T>
void print(T &deq, char *str)
...

这里的T是stl容器实例化的类,模板函数不关心是T什么容器,deque也好,vector也好,set也好,list也好,它遍历容器里的每个元素并打印。

论坛徽章:
0
6 [报告]
发表于 2012-10-04 11:47 |只看该作者
回复 5# selfrun


在容器里这样定义 iterator 类型?
   
typedef    迭代器类   iterator;

论坛徽章:
6
技术图书徽章
日期:2013-11-13 11:11:27子鼠
日期:2014-02-20 17:54:13处女座
日期:2014-06-16 17:43:33午马
日期:2014-08-08 09:11:17未羊
日期:2014-08-10 11:57:072015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2012-10-08 11:17 |只看该作者
本帖最后由 littledick 于 2012-10-08 11:17 编辑
cppfans6 发表于 2012-10-04 11:47
回复 5# selfrun

找个STL容器看源码会比较清楚。
各容器iterator的基类在xutility里。
一般都是
  1. template<class T, ...>
  2. class ContainerName : public xxx<T, ...>
  3. {
  4. public:
  5.     typedef _ContainerName_iterator<class T, ...> iterator;
  6. }
复制代码
这样的形式
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP