C++高级编程
文章平均质量分 56
qq_37172182
i++, ++i, c++, g++, x++
展开
-
C++高级编程----剖析(profile)
“大部分程序中90%的运行时间都在执行10%的代码”---------Hennessy & Patterson. Computer Architecture, A quantitative Approch这意味着,可能优化了90%的代码,但程序运行时间只提升了10%。更好地关注10%的运行代码是优化性能的基础;设计一个英文名计数任务,给定一个500500行人名的txt文件,统计不同名字出现的频率和对应的排名情况。第一版设计中考虑使用map作为数据结构,每次读取一行字符时需要判断名字是否存在,存原创 2021-12-11 21:11:51 · 1715 阅读 · 0 评论 -
C++高级编程----对象池实例
背景:当尝试使用C++进行代码优化时,可以考虑从语言层次和设计层次进行性能优化。1)语言层次:语言层次可以考虑从形参传递方式和返回值类型以及异常类型进行控制。按引用传递:由于C++按值传递会有一定的复制开销,而按引用可以避免复制开销,如果不希望改变引用值,建议进行const修饰;对于复杂对象的创建(销毁),按值引用可能带来不必要地调用其他成员变量的构造函数(析构函数)按引用返回:同样从函数的返回的角度考虑,按引用传递能避免不必要的复制开销;自C++11之后支持移动语义,允许高效地使用按值返回对象;原创 2021-12-11 20:35:21 · 853 阅读 · 0 评论 -
C++高级编程----多线程编程
题目要求:1)假设有一个Counter类,包含一个id和计数次数mNumIters,支持多线程(互斥体)完成计数任务;2)设计一个发送者和消费者模式的数据传输模型;3)支持多线程加法运算,实现每个Counter自加后结果不变;4)考虑设计一个日志类,多线程读写数据,写入数据后存储到log.txt文件中。分析:1)定义基于mutex的多线程任务,mutex支持lock_gurad和unique_lock等加锁方式,考虑重写类Counter的operator(),实现参数传递;2)定义基于条件变量的多线原创 2021-12-08 17:14:37 · 777 阅读 · 0 评论 -
C++高级编程----模板的高级特性
题目要求:假设有一个Grid类,定义了一个网格的的大小(mWidth, mHeight),每个网格对于一个值(value),这个值可能是int,double,string等类型;存储整个网格的数据结构可以是vector,可以是deque,可以提供默认初始值;可以支持二维、三维拓展;对于其中的一些函数,希望支持变长参数控制,支持元组类型的打印控制;分析:1)支持Grid<int, vector>, Grid<int, deque>, Grid,容器模板类编程支持vector、de原创 2021-12-04 21:17:01 · 765 阅读 · 0 评论 -
C++高级编程----扩展STL
题目要求:编写一个遵循一般STL规则的基本容器hash_map,考虑类模板编程方式,支持多种数据格式。分析:1)hash_map接口支持用户传入自定义的hash函数和hash桶的数目,在用户不知道的情况下提供默认的hash函数和桶数目;2)数据结构分析:hash_map支持myHash[key] = value能在常数时间内完成,每一个key可能有一系列value,value由(key,value)组成,因此考虑数据结构为:vector<list<pair<key, value&g原创 2021-12-02 22:39:13 · 890 阅读 · 0 评论 -
C++高级编程----熟悉类和对象
题目要求:设计一个电子表格,该电子表格有两个类:Spreadsheet和SpreadsheetCell。每个Spreadsheet都包含了若干个SpreadsheetCell,此外SpreadsheetApplication类管理Spread集合。step1 : 从最小单元SpreadsheetCell了解类和对象1 编写类定义和类方法考虑实际电子表格允许存储的对象可以是数字...原创 2020-04-25 14:16:06 · 487 阅读 · 0 评论