zoukankan      html  css  js  c++  java
  • 读书笔记——Accelerated C++ Chapter 8

    一、一些定义

    1. 泛型函数

    在使用一个函数之前,不知道它的参数或返回类型是什么。这样的函数成为泛型函数。使用和创建泛型函数的能力是C++的一个重要功能。

    2.模板函数

    实现泛型函数的语言特征被称为模板函数。模板允许为我们为一个行为特性相似的函数族(或类型族)编写一个单独的定义,将族中各个函数(或类型)之间的差别归因于他们的模版参数的类型不同。不同类型的对象仍然可以享有相同的行为特性。

    3.五种策略(附加五种迭代器)

    3.1 顺序只读访问

    对一个序列的元素提供了顺序只读访问操作的迭代器应该支持++(前缀或后缀形式的),==,!=,*,it->member、(*iter).member

    如果一个类型提供了以上的所有操作,即为输入迭代器。

    我们所见过的每一个容器迭代器都支持所有这些操作,因此他们都是输入迭代器。

    Find函数就采用了这种访问方式。

    3.2 顺序只写访问

    输出迭代器,除了满足输入迭代器的要求之外,还要满足在两个赋值运算之间吵过一次的自加操作,也不能在没有对it进行递增的情况下对it进行多次赋值。

    Copy函数就采用了这种访问方式。

    3.3 顺序读写访问

    Replace函数就采用了这种访问方式,他是在<algorithm>中定义的。

    正向迭代器不必满足输出函数迭代器的一次赋值要求,但必须支持以下操作:

    *it(对于读和写)

    ++it,it++(不用支持—it,it--)

    it==j和it!=j(在这里,j的类型和it一样)

    it->member(作为(*it).Member的一个替代名)

    所有标准库容器都满足正向迭代器的要求。

    3.4 可逆访问

    在一个类型满足了正向迭代器的要求后,并且还支持--(前缀和后缀),就将其称之为双向迭代器。

    Reverse函数就采用了这种访问方式,是在<algorithm>中定义的。

    所有标准容器类均支持双向迭代器。

    3.5 随机访问

    随机访问迭代器除了满足双向迭代器的要求之外,还有满足以下条件:

    p+n,p-n,n+p

    p-q

    p[n](与*(p+n)等价)

    p<q,p>q,p<=q,p>=q

    Sort函数就采用了这种访问方式。向量和字符串迭代器都是随机访问迭代器,链表迭代器只支持双向迭代器。

    二、补充

    1.在依赖于一个模板参数的类型,希望使用这个类型的一个成员时,可在整个名称前面加上typename。

    Typedef typename vector<T>::size_type vec_sz;

    2.只要一种类型以某种特定的方式支持特定的操作集时,这个类型才会是一个迭代器。

    3.顺序写迭代器中所谓的“一次写入”是对使用迭代器的程序,而不是对迭代器本身。

  • 相关阅读:
    正则表达式30分钟入门教程
    Python的神奇方法指南
    Python 2.7教程
    javaweb开发.常用的第三方包
    javaweb开发.页面中文乱码问题
    javaweb开发.eclipse使用小常识
    javaweb开发3.基于Servlet+JSP+JavaBean开发模式的用户登录注册
    ionic3使用第三方图标
    json-server使用及路由配置
    javaweb开发2.新建一个javaweb项目
  • 原文地址:https://www.cnblogs.com/wenhuozhujiangcha/p/3448367.html
Copyright © 2011-2022 走看看