STL简介(sos).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
输入迭代器 按顺序只读一次。完成的功能有:能进行构造和缺省构造,能被复制或赋值,能进行相等性比较,能进行逐步向前移动,能进行读取值。输入迭代器重载主要操作符 如下所示。 操作符 说明 operate* 访问迭代元素值 operate++() 前置迭代指针++ operate++(int) 后置迭代指针++ operate== 迭代元素相等比较 operate!= 迭代元素不等比较 STL提供的主要输入迭代器是istream_iterator,支持表3.1中的所有操作,值得注意的是它的构造函数,有两种形式: ?istream_iterator() 默认的构造器,创建了一个流结束的迭代器。 ?istream_iterator(istream ) 参数是输入流。含义是从输入流中读数据,当遇到流结束符时停止。 输出迭代器 只写一次,完成的功能有:能进行构造或缺省构造,能被复制或赋值,能进行相等性比较,能进行逐步前向移动,能进行写入值(*p=x,但不能读出)。输出迭代器重载主要操作符 如下所示。 操作符 说明 operate* 分配迭代元素值空间 operate= 写入元素值 operate++() 前置迭代指针++ operate++(int) 后置迭代指针++ STL提供的主要输出迭代器是ostream_iterator,支持表2.2中的所有操作,值得注意的是它的构造函数,有两种形式: ?ostream_iterator(ostream out) 创建了流输出跌代器, 用来迭代out输出流。 ?ostream_iterator(ostream out, const char *delim) 创建了流输出迭代器, 用来向out输出流输出数据,输出的数据之间用delim字符串分割,也即是每向out输出流输出一个数据后,再向out输出流输出一个分隔符delim。 前向迭代器 使用 输入迭代器 和输出迭代器可以基本满足算法和容器的要求。但还是有一些算法需要同时具备两者的功能。 STL本身并没有专为前向迭代器预定义的迭代器 。 双向迭代器: 具有前向迭代器的全部功能,另外它还可以利用自减操作符operator—向后一次移动一个位置。例如双向链表容器中需要的就是双向迭代器。 随机访问迭代器: 具有双向迭代器的所有功能,再加上一个指针所有的功能。包括使用操作符operator[]进行索引,加某个整数值到一个指针就可以向前或向后移动若干个位置,或者使用比较运算符在迭代器之间进行比较。 综观五种 iterator,我们发现从前到后需求越来越多5,也就是所谓的细化。这样在一切情况下都可以使用需求最细的随机迭代器,确实可以,但不好,因为过多的需求自然会降低它的效率,实际编程时应该选择正好合适的iterators 以期得到最高的效率。 非变异算法 1循环 2查询 3计数 4比较 非变异算法主要包含以下函数 序号 功能 函数名称 说明 1 循环 for_each 遍历容器元素,对每元素执行相同的操作 2 查询 find 在序列中找出某个值的第一次出现的位置 find_if 在序列中找出符合某谓词的第一个元素 find_first_of 在序列中找出第一次出现指定值集中之值的位置 adjacent_find 在序列中找出第一次相邻值相等元素的位置 find_end 在序列中找出一子序列的最后一次出现的位置 search 在序列中找出一子序列的第一次出现的位置 search_n 在序列中找出一值连续n次出现的位置 3 计数 count 在序列中统计某个值出现的次数 count_if 在序列中统计与某谓词(表达式)匹配的次数 4 比较 equal 两个序列中的对应元素都相同时为真 mismatch 找出两个序列相异的第一个元素 1 循环 主要函数 ①for_each 原形: templateclass InIt, class Fun Fun for_each(InIt first, InIt last, Fun f); 【例】打印向量中每个整形元素的立方 (1)for_each函数各参数的含义。start,end表示向量的起始迭代指针、结束迭代指针,不是具体的值,比如for_each(start[0], end, PrintCube)是错误的,因为start[0]表示的是向量中第一个元素的值1。但for_each(start[0], end, PrintCube)是正确的, 因为start[0]表示的是第一个元素的地址。 (2)PrintCube函数有且必须只有一个参数,且参数类型与向量的模板类型必须一致。 【例】求整数向量的和、最大值、最小值 分析:由于必须遍历整形向量的每个元素,因此可以应用for_each函数。当然可以应

文档评论(0)

ajgoaw + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档