第四章 4.5节练习
来源:互联网 发布:淘宝刷单兼职 360 编辑:程序博客网 时间:2024/05/23 16:59
练习4.17
说明前置递增运算符和后置递增运算符的区别。
解答:
【引用】前置版本将对象本身作为左值返回,后置版本则将对象原始值的副本作为右值返回。
练习4.18
如果第132页那个输出vector对象元素的while循环使用前置递增运算符,将得到什么结果?
解答:
这里会使得程序崩溃。
这里将打印:第二个元素,第三个元素。。。。第n个元素,还有end
end在这里相当于一个标识,里面没有任何元素,所以当要打印end解引用的值时肯定会出错。
测试程序:
#include <iostream>#include <vector>using namespace std;int main(){vector<int> ivec{ 1, 2, 3 };auto pbeg = ivec.begin();while (pbeg != ivec.end() && *pbeg >= 0){cout << *++pbeg << endl;}}
练习4.19
假设ptr的类型时执行int的指针、vec类型时vector<int>、ival的类型是int,说明下面的表达式是何含义?如果有表达式不正确,为什么?应该如何修改?
(a) ptr != 0 && *ptr++
(b) ival++ && ival
(c) vec[ival++] <= vec[ival]
解答:
(a) (ptr != 0) && (*(ptr++)) 这样用括号标注一下可能会看的比较清楚。这个表达式是正确的,先判断指针是否为空,如果为空,判断失败;如果不为空,再看指针指向的是不是0,然后对指针进行地址偏移操作。
(b) 先判断ival是否为0,不为零的情况下,会继续判断,ival自加之后的值是否为0
(c) 这里比较了几个编译器的执行顺序,这个表达式等价于vec[val] <= vec[val+1],看下一个元素是否比当前元素大。
这里的表达式不正确…… 不是很清楚是什么意思,这里表达式是否正确,个人认为判断的条件还不足。
0 0
- 第四章 4.5节练习
- 第四章 4.2节练习
- 第四章 4.3节练习
- 第四章 4.4节练习
- 第四章 4.8节练习
- 第四章 4.9节练习
- 第四章 4.10节练习
- 第四章 4.11.1节练习
- 第四章 4.11.3节练习
- 第四章例题练习
- 第四章 编程练习
- 第四章编程练习
- 第四章 4.1.2节练习 & 4.1.3节练习
- 第四章 4.6节练习 & 4.7节练习
- 人力资源第四章练习解答
- simply scheme 第四章 练习
- 第四章上机练习5
- 书本第四章编程练习
- 关联规则挖掘
- 离线LCA学习
- Unit 5: Punctuation
- Cocos2d-x开发---关于内存检测
- Unit 5: Capitalization, Spelling and Commonly Confused Words - Homophones
- 第四章 4.5节练习
- 《世界因你不同(李开复自传)》
- SVN教程——分支与合并
- ecnu 1244
- android 开发者需要了解的
- hdu 4291 矩阵幂 循环节
- 笔试和面试中遇到的问题(1)
- windows下使用memcache并修改memcache最大使用内存
- Android中使用animation的方法