| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 490 人关注过本帖
标题:小问题了
只看楼主 加入收藏
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
呵呵,你终于发现了, 这个 iterator 可以在参数中指向数组的一部分,
比如说:可以转送f_count(s_begin + 2, s_end, 3); 从第三个元素开始计数, s_end作为指针,是指向的数组最后一个元素的下一个位置,
作用是哨兵指针,虽然指向的位置非法,但并没有在泛型算法中参与运算,所以可以指向.
说得再明白一些,就是告诉算法,s_end指向的前一个位置是数组最后一个元素.
2012-11-30 15:30
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
int s[]    = {1, 3, 3, 4, 3, 3, 3, 5, 4, 3, 3};
    int *p=&s[0];
    p++;
    p++;//从数组第3位向后找
    ITER s_begin = p;  //这里假定s_begin=p=10000
    ITER s_end   = p + sizeof(s) / sizeof(s[0]);  //这里s_end=10000+数组元素长11*4=10044
   这里的s_end的前一项就不是数组的最后一个元素了吧

DO IT YOURSELF !
2012-11-30 15:36
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
你的写法有问题, p++; p++; p的值已经改变了, s_end = p + size(s) / sizeof(s[0])直接越界,
多半程序运行会崩溃.你要确何s_end指向数组的最后一个元素的下一个位置,或是指向有效元素: int result = f_count(s_begin + 2, s_end - 2, 3);
才能保证泛型算法成功.
2012-11-30 15:41
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
谢谢newdos大虾

我想这个问题多少明白一些了

这是我在网上搜的一点东东
大多数泛型算法是工作于容器的一对迭代器所标识的范围,并完全通过迭代器来实现其功能。这段由迭代器指定的范围称为“输入范围”。带有输入范围参数的算法总是使用前两个参数标记该范围,分别指向要处理的第一个元素和最后一个元素的下一个位置。



DO IT YOURSELF !
2012-11-30 15:52
快速回复:小问题了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020828 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved