上一篇请见可能令你困惑的C++语法1

现在继续,

2.临时对象的产生和运用

临时对象,是一种无名对象。制造临时对象的方法是,在型别之后加一对小括号,并可以给定初值,这样就会调用响应的constructor。在stl中,往往与仿函数一起使用,这样为了使程序看起来干净。

template <typename T>
class print{
public:void operator(){const T& elem){cout << elem << ' ';}
};int main(){int ia[6] = {0,1,2,3,4,5};vector<int> iv(ia,ia+6);for_each(iv.begin().iv.end(),print<int>());
}

3.静态成员初始化问题

静态非const成员初始化,是在类定义内声明,类外定义时设定初值初始化;

静态const成员初始化,在类定义内直接初始化。

4.自增自减的前置与后置

C++中使用++和--,根据出现在对象的前面或者后面来进行调用。其实是根据函数重载来实现的,当编译器看到++a时,就调用operator++(a),当看到a++时,就调用operator(a,int)。这里编译器为int传递一个哑元常量值(因为此值永远也不会被使用),用来给后缀产生不同的标记。

使用示例如下,这是在类T中的代码:

//prefix: increment and then fetch
T& operate++(){++(this->i);// 成员变量递增,不同T有不同表现return *this;
}
//postfix: fetch and then increment
const T operator++(int){T temp = *this;++(*this);return temp;
}

5.stl中区间表示[ )

区间采用前闭后开的表示方法。[first,last),包含的元素范围为[first,last-1)。

6.仿函数

仿函数就是类似函数的结构体或者类。要把某类当做仿函数使用,类必须进行operator()重载,这是就可以像使用函数一样使用。

这里也加入第7章的内容,记录一下仿函数。

许多stl算法提供两个版本,一个用于一般状况,一个用于特殊状况。在特殊状况时,需要用户指定某个条件或者策略,而条件或者策略的背后由一整组操作构成。

在stl中,这一整组操作就是指的仿函数。一般的函数,如果当做参数传递,只有通过函数指针,但是指针无法只有自己的状态,更重要的一点是函数指针不能满足stl对抽象性的要求,所以达不到stl组件的可适配性。

仿函数根据函数参数可以分别为一元仿函数(unary_function)和二元仿函数(binary_function),用户自定义仿函数必须继承其中的一个。

下面是一元仿函数的参数型别和返回值类型,二元仿函数类似。

template <class Arg, class Result>
struct unary_function{typedef Arg argument_type;typedef Result result_type;
}

根据功能分为算术类(Arithmetic)仿函数、关系运算类(Rational)仿函数和逻辑运算类(Logical)仿函数,这些仿函数也都继承自一元或者二元仿函数。

这里要清楚几个概念,

证同元素,所谓“运算op的证同元素”,即数值与某个元素做op运算,会得到自己,则该元素则为该运算符的证同元素。

证同函数,任何数值通过此函数后,都不会有任何改变。

选择函数,接受一个pair,传回第一个或者第二个值。

投射函数,传回一个参数,忽略另外一个。



《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法2相关推荐

  1. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  2. STL源码剖析学习二:空间配置器(allocator)

    STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...

  3. STL源码剖析学习之increment、decrement、dereference实现源码

    //STL之increment.decrement.dereference实现源码 //学习目的:STL实现原理.操作符(++i,i++,*等操作符的重载) //increment/dereferen ...

  4. STL源码剖析—学习记录

    提示:建议看完侯捷老师的STL标准库视频后,再看这本书,会看的下去一些!本人对其中重点内容和概念进行了提取,希望对一起前行的人有些许帮助,码字不易,欢迎点个赞呦! 文章目录 一.可能令你困惑的C++语 ...

  5. STL源码剖析学习十四:算法之set相关算法

    STL中定义的set要求元素不得重复且已经排序 set算法要求的都是有序区间,但元素可以重复出现 另外提供的hash版本的set因为其元素无序,因此不能作为set函数的参数 set算法前4个参数分别表 ...

  6. 《STL源码剖析》学习--6章--_rotate算法分析

     最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. <STL源码剖析>学习--6章--random access ite ...

  7. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法1

    最近在看侯捷的<STL源码剖析>,虽然感觉自己c++看得比较深一点,还是感觉还多东西不是那么明白,这里将一些细小的东西或者概念记录一下. 有些东西是根据<C++编程思想>理解的 ...

  8. 《STL源码剖析》学习--6章--power算法分析

    最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. 6章--power算法分析 书本中的算法如下所示: template <clas ...

  9. 《STL源码剖析》相关面试题总结

    一.STL简介 STL提供六大组件,彼此可以组合套用: 容器 容器就是各种数据结构,我就不多说,看看下面这张图回忆一下就好了,从实现角度看,STL容器是一种class template. 算法 各种常 ...

  10. 【STL源码剖析】list模拟实现 | 适配器实现反向迭代器【超详细的底层算法解释】

    今天博主继续带来STL源码剖析专栏的第三篇博客了! 今天带来list的模拟实现! 话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://b ...

最新文章

  1. MapReduce统计排序和HDFS的读写
  2. 不用悬浮窗权限弹出全局dialog的解决方法
  3. python drop函数_用python帮财务小姐姐自动生成财务报表
  4. Javascript的this用法
  5. 关于 ORA-01033: ORACLE initialization or shutdown in progress
  6. ubuntu下eclipse新建项目没有java project的解决办法
  7. Prism4文档翻译(第四章 第二部分)
  8. 关于node.js和C交互的方法
  9. 把虚拟机装到内存里(打开PScs3只需要2秒)
  10. 生产者消费者_【Java面试】实现生产者消费者模式
  11. 《HTML与CSS入门经典(第8版)》——导读
  12. hdu 3065 AC自动机模版题
  13. 制作一个模拟Windows启动界面的文本进度条python
  14. 关于EasyExcel 优化,实现格式自定义,数据字典自动转化。
  15. MyBatis的插件
  16. 为什么亚马逊无货源是国际电商新时代
  17. 张亮:十万级并发任务调度框架 ElasticJob 的定位与设计理念
  18. VC中三种常见中文内码的转换方法
  19. github unable to access 'https://github.com/...: Failed to connect to github.com port 443‘
  20. OculusClient登录错误“发生意外错误,请稍后重试(OVR40779122)”解决方法

热门文章

  1. Python编程基础:第三十九节 面向对象编程Object Oriented Programming
  2. 魅族大数据之流平台设计部署实践--转
  3. 使用JSON Web Token设计单点登录系统--转
  4. linux diff(differential) 命令
  5. redis High Availability---Redis Sentinel翻译
  6. android 图片操作
  7. 【SQL】SQL语句多表联合查询
  8. 【Python】Pyecharts数据可视化模块练习
  9. 自动化特征工程和自动建模在风控场景的应用
  10. 埃森哲咨询公司为何拥有世界上最多的区块链职位空缺