类
class
定义:可以将变量打包在一起
privacy后面数组或者函数表示都是私有的只能在类里面调用,public表示在类外面和里面都可以公用
结构体
struct
结构体可以构造函数,内部可以写参数
#include <iostream>
using namespace std;
struct Person
{
int age, height;
double money;/* Person(){}默认无参数时调用 int main()里面Person p;*/
Person(int _age, int _height, double _money)//可以调用参数,person是构造函数
{
age =_age;
height = _height;
money =_money;
}
};
int main()
{
Person p(18, 100, 10000);//含参数构造的函数
return 0;
}
进程
有空间的概念,每一个程序长度有映射关系是该空间的数组,打开文件是独立的。
百度概念:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。
特征
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块三部分组成。
栈
可以定义函数变量,局部变量,是自上而下运行。
百度概念:栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表。
栈可以用来在函数调用的时候存储断点,做递归时要用到栈。
堆
可以定义全局变量,初始化为0;
百度概念:堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
堆是非线性数据结构,相当于一维数组,有两个直接后继。堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2)
若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。由此,若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。
指针和引用
指针指向存放变量的值的地址,我们可以通过指针来修改变量的值。
百度概念:指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
指针的地址与原值的关系是,原值是a(此时a的地址相当于数组下标8位byte,若取得char c 定义c = ‘a’ ,地址输出cout << (void *) &c <<endl;表示存储其下标,即存了97的值用16位字符表示。
- 引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。
- 引用初始化后不能被改变,指针可以改变所指的对象。
- 不存在指向空值的引用,但是存在指向空值的指针。
定义指针
实验
#include <iostream>
using namespace std;
int main()
{
int a = 3;
int* p = &a;
cout << (void *)p << endl;//a的地址
cout << *p << endl;//*p = a = 3
return 0;
}
/*
*p += 5;输出*p表示a的地址增加5个值,但输出a还是原指针地址值
*/
}
当
int a =1;
int* p = &a;
定义*p = 12; cout << *p << endl; //*p变成12
此时a的值也有所改变为12;
数组指针
&p = a 表示a的给指针取名字
#include <iostream>
using namespace std;
int main()
{
int a[5] = {1,2,3,4,5};
cout << a << endl;//表示输出第一个位置指针地址
/*for (int i = 0;i<5; i++)
int* p = &a[i];
cout << (void*)p << endl;
*/
for (int i = 0;i<5; i++)
{
cout << (void *) &a[i] << endl;//输出a数组5个地址
}
return 0;
}
链表
百度定义:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
如果p指针可以用p -> next = p表示存储结点地址而不是它的值;如果p不是指针可以用“.”调用p. next =p;
链表表示
Node *p = new Node(1);
或者 auto q = new Node(1);
表示返回地址存储1号结点地址;
auto q =new Node(1)//在二号节点地址
p -> next = q;//表示p指向构造新的结点q
一般的存到head里面是第一个结点地址,而不是他的值。
链表删除
是指原链表遍布过程中跳过,用next指向下一位;
删除结点
head->next = head ->next->next;//表示删除
添加结点
auto u = new Node(u);
u-> next = head;
head = u;
//表示在投部添加结点u;