第十三章 13.3节练习
来源:互联网 发布:programming python 编辑:程序博客网 时间:2024/06/06 18:14
练习13.29
解释swap(HasPtr&, HasPtr&)中对swap的调用不会导致递归循环。
解答:
inline void swap(HasPtr &lhs, HasPtr &rhs){ using std::swap; swap(lhs.ps, rhs.ps); swap(lhs.i, rhs.i);}这是swap的实现,这里不会产生递归调用。
这里swap重载了,在HasPtr中的swap调用中,不会再去调用自身。
因为,在HasPtr的swap函数中使用的是标准库中的swap函数。
练习13.30
为你的类值版本的HasPtr编写swap函数,并测试它。为你swap函数添加一个答应语句,指出函数什么时候执行。
解答:
inlinevoid swap(HasPtr &lhs, HasPtr &rhs){ std::cout << "call HasPtr's swap function." << std::endl; using std::swap; swap(lhs.ps, rhs.ps); // swap the pointers, not the string data swap(lhs.i, rhs.i); // swap the int members}
HasPtr f(HasPtr hp) // HasPtr passed by value, so it is copied{ HasPtr ret = hp; // copies the given HasPtr HasPtr cp; swap(ret, cp); // will call HasPtr::swap // process ret return ret; // ret and hp are destroyed}
练习13.31
为你的HasPtr类定义一个<运算符,并定义一个HasPtr的vector。为这个vector添加一些元素,并对它执行sort。注意何时会调用swap。
解答:
</pre><pre name="code" class="cpp">bool HasPtr::operator<(const HasPtr &rhs){<span style="white-space:pre"></span>if (*ps > *(rhs.ps)){<span style="white-space:pre"></span>return false;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>if (i > rhs.i){<span style="white-space:pre"></span>return false;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>return true;}
在我的执行结果里面,没有调用到swap(),不知道题目里面问“何时会调用swap”是什么意思。
练习13.32
类指针的HasPtr版本会从swap函数受益吗?如果会,得到了什么益处?如果不是,为什么?
解答:
这个会的,使用指针不用分配新的空间出来,节省了分配空间的时间。
同样,对类中使用inline也能作为优化的一种手段。
具体可以查看458页的一些内容(优化部分说的也不是很多)。
0 0
- 第十三章 13.3节练习
- 第十三章 13.4节练习
- 第十三章 13.5节练习
- 第十三章 13.1.1节练习
- 第十三章 13.1.2节练习
- 第十三章 13.1.3节练习
- 第十三章 13.1.4节练习
- 第十三章 13.2.1节练习
- 第十三章 13.2.2节练习
- 第十三章 13.6.1节练习
- 第十三章 13.6.2节练习
- 第十三章 13.6.3节练习
- 第十三章 编程练习
- 第十三章上机练习
- 第十三章练习
- 第十三章 13.1.6节练习 & 13.2节练习
- simply scheme 第十三章 练习
- 第十三章编程练习(3)
- Decode Ways
- 点击图片在弹出层显示大图
- MyMFC(10-11)绘图控制和保存 CMyMFC4View
- Lua的面向对象--类和继承
- MyEclipse 10 添加xfire客户端插件
- 第十三章 13.3节练习
- oracle忘记用户名密码怎样办???
- 同步Synchronized方法与代码块
- 最全的CSS浏览器兼容问题
- android开发者相关网站
- MyMFC(10-11)绘图控制和保存 SettingDlg
- linux平台开发自学笔记(三)-代码编译
- 小蜂微门铃——不用APP就能微信视频的门铃
- Linux 平台下日期 时间问题