摘要:
本文整理几种基本容器:列表、元组、字典和集合的用法和collections中几种已经预先实现的容器数据结构:namedtuple(),双向链表deque,ChainMap,Counter,OrderedDict,defaultdict。其中,deque是一个双向链表的结构,namedtuple是tuple的拓展,ChainMap,Counter,OrderedDict,defaultdict都可以... 阅读全文
摘要:
这是浮点数的通常表示形式,在IEEE754中,单精度浮点数有如下形式: 32位单精度 单精度二进制小数,使用32个比特存储。 1823位长SExpFraction3130至23偏正值(实际的指数大小+127)22至0位编号(从右边开始为0)S为符号位,Exp为指数字,Fraction为有效数字。 指数部分即使用所谓的偏正值形式表示,偏正值为实际的指数大小与一个固定值(... 阅读全文
摘要:
本篇文章讲述在学习CSAPP位运算LAB时的一些心得。 移位运算的小技巧 C/C++对于移位运算具有不同的策略,对于无符号数,左右移位为逻辑移位,也就是直接移位;对于有符号数,采用算术移位的方式,即左移仍为直接移位,右移时新产生的位用符号位补足。这种设计的目的是保证右移永远代表除以二,在不考虑溢出的情况下,左移永远代表乘以二;这里涉及到的一个规律是,二进制负数的左侧实际上有无数个1;二进制正数的左... 阅读全文
摘要:
一、关键字decltype 由对象得到对象的数据类型,例如 Complexa(1,2); decltype(a)b(3,4); declare type是让编译器去找到它的类型。 Decltype甚至允许你使用在函数被调用时才确定的数据类型,例如: templatedecltype(x+y)add(T1x.T2y... 阅读全文
摘要:
一、 可变参数模板(Variadic Templates) 在C++11中,出现了参数数目可变的模板,这部分在之前C++高级编程的时候就有学习到。 其实,在C中就有类似的设定。最常用的printf(),就是一个采用了一个…类型的可变参数。…类型的参数代表是一个参数组。 intsumi(intc,...){va_listap; va_sta... 阅读全文
摘要:
本篇笔记紧接上篇,继续学习设计模式。 4. 对象创建类设计模式 通过对象创建模式绕开new,来避免对象创建(new)过程中所导致的紧耦合,从而支持对象创建的稳定。它是接口抽象之后的第一步工作。 4.1 Factory Method(工厂方法) 4.1.1 应用场景 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。 4.1.2 定义与解释 定义一个用于创... 阅读全文
摘要:
一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。 这样,你就能一次又一次 地使用该方案而不必做重复劳动。 0. 从面向对象谈起 底层思维与抽象思维: 底层思维要求程序员"向下"思考,去把握机器底层,从微观理解对象构造。这就包含了我们之前所学习的C++基本语法,封装,继承,多态这三大机制以及编译原理的相关内容。 抽象思维要求程序员"向上"思考,考虑如何让世界抽象成代码,... 阅读全文
摘要:
本篇文章主要介绍泛型算法中的变易、排序、数值算法。 一、 变易算法 所谓变易算法是指那些改变容器中的对象的操作。 1.1 copy组 template OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);Copy操作是将两个... 阅读全文
摘要:
本篇文章在上一篇文章的基础上进一步介绍一些常用的容器以及STL的一些深入知识。 一、 Stack和Queue 栈和队列是非常常用的两种数据结构,由deque适配而来。关于数据结构的知识这里就不在介绍了,仅介绍STL中的成员方法。 stack 的基本操作有:入栈,如例:s.push(x);出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。访问栈顶,如例:s.top()判断栈... 阅读全文
摘要:
在C++语法的学习过程中,我们已经对模板有了基本的了解。泛型编程就是以模板为工具的、泛化的编程思想。本篇文章介绍了一些在之前的文章中没有涉及到的一些模板知识、泛型编程知识和几种容器。关于模板的一些重复知识在这里就不再进行赘述。 一、关于模板的知识点补充 1. 函数模板的参数推导与显式指定 通常情况下,我们一般采用参数的自动推导方式去使用函数模板。在自动推导时,为了确保推导的正确性,C++不允许... 阅读全文