平时看到C/C++ 结构体问题的一些知识,比较有用,分享出来

来源:互联网 发布:淘宝上日本直邮几天 编辑:程序博客网 时间:2024/05/18 11:26

程序如下:

#include <iostream>#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define MAX_VERTEX_NUM 20#define INFINITY INT_MAXusing namespace std;int i,j,n,m; enum Mark{    INFEASIBLE=-2,    OVERFLOW,    ERROR,    OK};typedef struct ArcCell{    int data;} ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{    char vexs[MAX_VERTEX_NUM];    AdjMatrix arcs;    int vexnum,arcnum;} MGraph; int LocateVex(MGraph &G,char v)   //寻找图中相同名称的顶点{    for(i=0; i<G.vexnum; i++)    {        if(v==G.vexs[i])            return i;        if(i==G.vexnum)            return ERROR;     }    return OK;}int CreateGraph(MGraph &G,int l,int k){    char v,v1,v2;    int count=0;    G.vexnum=l;    G.arcnum=k;    for( i=0; i<l; i++)    {        for(j=0; j<l; j++)            G.arcs[i][j].data=0;    }    while(l--)    {        cin>>v;        G.vexs[count++]=v;    }    while(k--)    {        int e,r;        cin>>v1>>v2;        e=LocateVex(G,v1);        if(i<0) return ERROR;        r=LocateVex(G,v2);        if(j<0) return ERROR;        G.arcs[e][r].data=1;        G.arcs[r][e].data=1;    }    return OK; }//------------------------------------------------------------------------------------------//int InsertArc(MGraph &G,char v,char w){    i=LocateVex(G,v);    cout<<i;    j=LocateVex(G,w);    cout<<j;    if(i<0)        return ERROR;    if(j<0)        return ERROR;    if(i==j)        return ERROR;    if(G.arcs[i][j].data!=1)    {        G.arcs[i][j].data=1;        G.arcs[j][i].data=1;        cout<<G.arcs[i][j].data;         cout<<G.arcs[j][i].data;        G.arcnum++;    }    return OK;}//---------------------------------------------------------------------------------------------//int InsertVex(MGraph &G,char v){     if(G.vexnum>=MAX_VERTEX_NUM)        return INFEASIBLE;    G.vexs[++G.vexnum]=v;    return OK;}int DeleteVex(MGraph &G,char v){    n=G.vexnum;    m=LocateVex(G,v);    if(j<0)        return ERROR;    char ch;    ch=G.vexs[n-1];    G.vexs[n-1]=G.vexs[m];    G.vexs[m]=ch;    for(i=0; i<n-2; i++)    {        G.arcs[m][i]=G.arcs[n-1][i];    }    G.arcs[m][m].data=0;    G.vexnum--;    return OK;}int DeleteArc(MGraph &G,char v,char w){    i=LocateVex(G,v);    j=LocateVex(G,w);    if(i<0)        return ERROR;    if(j<0)        return ERROR;    if(G.arcs[i][j].data)        G.arcs[i][j].data=0;    G.arcnum--;    return OK;}int main(){    MGraph G;    int l,k;    char ch1,ch2;    cin>>l>>k;    CreateGraph(G,l,k);    cin>>ch1>>ch2;    InsertArc(G,ch1,ch2);    for( i=0; i<G.vexnum; i++)    {        for(j=0; j<G.vexnum; j++)        {            cout<<G.arcs[i][j].data<<" ";        }        cout<<endl;    }     return 0;}

问题:
cout<<G.arcs[i][j].data;
         cout<<G.arcs[j][i].data;
为什么没结果的?

解答:
C/C++结构体的区别  
C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数。
C++中的结构体和类的异同:
一、相同之处:结构体中可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。但C中的结构体不允许有函数;
也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。
二、不同之处:结构体定义中默认情况下的成员是public,而类定义中的默认情况下的成员是private的。类中的非static成员函数有this指针,(而struct中没有是错误的,一直被误导啊,经过测试struct的成员函数一样具有this指针),类的关键字class能作为template模板的关键字 即template<class T> class A{}; 而struct不可以。
实际上,C中的结构体只涉及到数据结构,而不涉及到算法,也就是说在C中数据结构和算法是分离的,而到C++中一类或者一个结构体可以包含函数(这个函数在C++我们通常中称为成员函数),C++中的结构体和类体现了数据结构和算法的结合。
0 0
原创粉丝点击