1.头文件:
c一般用#include“stdio.h"
而cpp用的为#include "iostream" (简记ios+tream)
此外还有加一行using namespace std;
2.标准输入输出:
c实现:
scanf("%d",&a);
printf("%d/n",a);
cpp实现:
cin>>a cout<<a<<endl
简记为:输入>>,输出<<
cpp不用标明数据的类型,而c需要。在没有指定域时一般采取就近原则输出。
例如:
namespace A
{
int a=10;
namespace B
{
int a=20;
}
}
cout<<A::a<<endl; //毋庸置疑输出的就是A中的int a=10;
cout<<A::B::a<<endl;//此处输出的为B中的int a=20;
3.同时存在相同名字的函数(函数重载)
在c语言中同名函数不能同时存在。而c++可以
定义:同一个作用域内,相同函数名,参数不同(类型不同,个数不同)可以构成函数重载(和返回值无关)
函数重载的定义:函数重载的原理是会进行函数名修饰。如int fun(int i,char a)和void fun(char a,int i)就可以构成函数重载,根据函数名修饰的原理我们可以得到_funic和 _funci两个经过修饰之后得到的函数名,在进行修饰后的函数名显然是不同的。
自我理解为:用参数类型添加了一个修饰,int就加i,char就加c。
4.缺省参数
cpp可以在定义时为参数进行一个赋值,只要它被初始化赋值那么在调用时可以不用传参哩。
#include "iostream"
using namespace std;
int Add (int a,int b = 20)
//有多个参数时int Add (int a,int b,int c = 30)
{
return a+b;
}
int main()
{
cout<<Add(10)<<endl;
cout<<Add(10,30)<<endl;
}
5.指针(*)和引用(&)
指针:指针仍然是指向一个数据的地址。
引用:理解为新增一个该数据的别名,实际作用和该数据本身其实没区别。
简单举例为swap()函数
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
引用和指针的区别和联系
1.引用只能在初始化是引用一次,不能改变为再引用其他变量;而指针变量的值可变
2.引用必须指向有效的变量,而指针可以为空
3.相对而言,引用比指针更安全,指针比引用更灵活
图:
图的逻辑结构:多对多
图没有顺序存储结构,但可以用二维数组来表示元素之间的关系(邻接矩阵)
链式存储结构:因为图很难确定有几个指针,所以难以用链表表示,故采用多重链表(邻接表,邻接多重表,十字链表)
1.数组表示法(邻接矩阵法)
(1)建立一个顶点表(记录各个顶点的信息)
(2)建立邻接矩阵(表示各个顶点之间的关系)
例:设图A=(V,E)有n个顶点,则
顶点表Vexs【n】就建立n个元素的数组存放n个顶点。
图的邻接矩阵为一个二维数组,设为A.arcs【i】【j】(理解为两个顶点之间的关系)
如果存在一条弧或者一条边,则矩阵中记录【i】【j】为1
如若不存在的话则记录为0;
分析其一:无向图的邻接矩阵是对称的
分析其二:顶点i的度即为第i行和i列的“1”的个数,如果是无向图就只要考虑每一行“1”的个数。
完全矩阵:只有对角元素为0,其他元素全部为1。
无向邻接矩阵:
表示为:
有向邻接矩阵:
表示为:
有向的邻接矩阵:
第i行的含义:以节点vi为尾的弧(即出渡边)
第i列的含义:以节点vi为头的弧(即入度边)
有向的邻接矩阵不一定是对称的
简单的邻接矩阵实现(有向):
#include "iostream"
using namespace std;
int main()
{
int v,e;
cout<<"请输入节点个数:";
cin>>v;
cout<<"请输入边的个数:";
cin>>e;
int data_bian[v][2],Arcs[v][v]={0},Vexs[v]={0};
for(int i=0;i<e;i++)
cin>>data_bian[i][0]>>data_bian[i][1]; //输入节点的边
for(int i=0;i<e;i++)
Arcs[data_bian[i][0]][data_bian[i][1]]=1; //有弧就置1
for(int i=0;i<v;i++)
for(int j=0;j<v;j++)
Vexs[i]+=Arcs[i][j]+Arcs[j][i]; //计算每一个节点的度
return 0;
}
网(有权图)的邻接矩阵表示法:
即对边值进行另一种判定,有边就记录权值,没有边就记录为无穷大。
未完待续。。。