Accelerated C++ 第八章潦草笔记

来源:互联网 发布:手机淘宝回收站在哪里 编辑:程序博客网 时间:2024/05/01 13:48

1.max函数为什么不能输入两个不同类型的参数:

因为max函数模板定义中对两个参数都用了同一个类,那么当函数接受到两个不同类型的参数时,编译器便会不知道哪个参数作为目前的类型来实例化,所以就会报错。
推测其他设计比较的泛型函数之所以可以可以比较两个不同类型的参数,是因为这个函数在定义时分别为两个参数用了不同的类,并且比较操作是可以作用在不同类型上的;

2.迭代器类型

1.输入迭代器
2.输出迭代器
3.前向迭代器
4.双向迭代器
5.随机访问迭代器
其实标准库容器都支持前4种,那为什么4中不合并呢?
因为迭代器不仅可以用在标准库容器上,也可以用在其它非标准库的东西上,例如流,也有自己的流迭代器,定义在中,还有像back_insert(c)函数他生成的是一个输出迭代器。

3.为什么c.end()是指向最后一个元素的下一位置。

因为这虽然有点奇怪,但却可以简化程序。
例如,这符合半开区间的表示。并且可以表示一个区间之外的值来作为表示查找失败的返回值。
还可以通过目前的迭代器与其作比较来判断是否空区间。表示空区间非常方便。

4.利用迭代器直接复制到输出上,不用打循环了。

copy(v.begin(),v.end(),ostream_iterator(cout,” “);
便可以直接把v中的元素,每个有空格地输出到标准输出上。
同时,也要告诉标准输出输出的是什么类型的值。
在cout<< x;中,可以有x的类型来知道输出是什么类型,而在copy中,则要显示告诉标准输出输出什么类型的值。

5.使用输出迭代器可以更好地改进之前的split 函数