Android基础之学习C/C++语言笔记

指针

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值