指针
int a=10;
获取变量a的指针地址:&a 定义指针变量:int* pa=&a; 获取指针地址中的值:*pa
#define与const的区别:
1、const定义的常量带类型,如int
2、const在编译、运行的时候起作用,#define在编译的预处理阶段起作用
3、#define只是简单的替换,没有类型检查,简单的字符串替换会导致边界效应,需要括号确定范围
4、const可以进行调试,因为#define在预处理阶段就替换掉了,所以调试的时候就没有#define定义的常量了
5、const不能重新定义,#define定义后可以通过undef取消定义,再重新定义
6、#define通过与#ifdef、#ifndef、#endif配合使用,比如调试开关
取模公式:a%b=a-a/b*b
单独使用++或--时,放变量前或者放变量后,结果是一样的,eg.++k等价k++
如果把int i = ++k,int j = k++,就有区别
进制间转换
10进制转8进制:将10进制数不断除以8,直到商为0为止,然后将每步得到的余数倒过来即可。如:10进制的156转成8进制的234,其他同理
2进制转8进制:从低们开始,将2进制数每3位一组,转成对应的8进制数即可,转16进制就是每4位一组。如:2进制的11010101转成8进制的0325
原码、反码、补码
有符号:
1、2进制的最高位是符号位,0是正,1是负
2、正数的原码、反码、补码都一样
3、负数的反码=它的原码符号位不变,其他位取反
4、负数的补码=负数的反码+1
5、0的反码、补码都是0
6、在计算机运算的时候,都是以补码的方式来运算的
位运算符
按位与&:两位全是1,结果为1,否则为0
按位或|:两位只要有一个为1,结果为1,否则为0
按位异或^:不同为1,相同为0
按位取反~:1变0,0变1
左移<<:2进制位全部左移若干位,右边补0,左边丢弃
右移>>:2进制位全部右移若干位,正数左边补0,负数左边补1,右边丢弃
C++
普通类中的成员函数一开始就创建
类模板中的成员函数调用的时候创建
类模板对象做函数参数有3种传入方式
1、指定传入的类型---直接显示对象的数据类型
2、参数模板化---将对象中的参数变为模板进行传递
3、整个类模板化---将这个对象类型模板化进行传递
STL六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器
string容器
vector容器
1、数据结构与数组非常相似,也叫单端数组
2、数组是静态空间,vector可以动态扩展
3、动态扩展:并不是在原空间之后续接新空间,而是找到更大的内存空间,将原数据拷贝到新空间,并释放原空间
4、vector的迭代器是支持随机访问的迭代器
5、vector<int>(v).swap(v):收缩v容器的内存空间。原理是swap交换空间,匿名对象执行完后会释放空间
deque容器:双端数组,可以对头端(头部和尾部)进行插入删除操作,与vector的区别
1、vector对头部的插入删除操作效率低,数据量越大,效率越低
2、deque相对而言,对头部的插入删除操作相对较快
3、vector的访问速度快
随机数种子#include <ctime>
srand((unsigned int)time(NULL));
stack容器:FILO先进后出的数据结构,只有一个出口,只有顶端的数据可以访问,不能遍历
queue容器:FIFO的数据结构,2个出口
List容器:链表。物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的,由一系列结点组成,结点包含数据域和指针域
优点:
动态分配,不会浪费存储空间和溢出
插入删除方便,只需要移动指针即可,不需要移动大量元素
缺点:
链表灵活,访问数据在空间(存储了指针域)和时间(遍历)耗费大
List容器和vector容器是最常用的容器
set/multiset容器:所有元素在插入后会自动排序,关联式容器,二叉树实现
set与multiset区别是一个不允许一个允许重复元素
默认排序为从小到大,利用仿函数(重载小括号的函数)可以改变排序规则
pair对组数据:成对出现的数据
map/multimap容器:所有元素在插入后会自动排序,关联式容器,二叉树实现
1、所有元素都是pair
2、所有元素都会根据key值自动排序
3、map与multimap区别是一个不允许一个允许重复元素
4、默认排序为从小到大,利用仿函数(重载小括号的函数)可以改变排序规则
函数对象:即仿函数,是一个类,不是函数,行为类似函数调用
1、重载函数调用操作符的类,其对象称为函数对象
2、可以有参数,可以有返回值,可以有自己的状态
3、可以当做参数传递
谓词:一元(接收1个参数)和二元(接收2个参数)谓词,返回值为bool类型的仿函数
内建函数对象:SLB内建了算术、关系、逻辑仿函数,#include <functional>
算法头文件:algorithm、functional、numeric