本站提供最佳源码安装mysql启动服务,欢迎转载和分享。

【经纬指标公式源码】【古剑飞仙服务端源码】【量比单位用亿显示源码公式】std string源码

2024-11-23 10:53:31 来源:分时量指标源码 分类:时尚

1.C++ string 源码实现对比
2.学生信息管理系统源代码

std string源码

C++ string 源码实现对比

       标题:C++ string 源码实现对比

       作为游戏客户端开发工程师,作者lucasfan分享了他对不同版本C++ string源码的深入分析,以帮助开发者解决std::string在现网中可能引发的Crash问题。本文将对比libstdc++、经纬指标公式源码腾讯内部的Android和iOS SDK使用的string实现,以及tpstl string,古剑飞仙服务端源码涉及内存结构、构造函数和析构方法等关键部分。

       1. libstdc++ string

       Android SDK普遍采用的libstdc++ string以写时拷贝(COW)特性为主,但可能导致性能问题。其内存结构包含指向堆上数据的指针和一个包含长度信息的_Rep对象。构造函数如char*构造器负责内存申请和字符串拷贝,拷贝构造通过_M_grab处理共享与深度拷贝,量比单位用亿显示源码公式拷贝赋值操作涉及assign方法。

       2. libc++ string (iOS SDK)

       相比之下,iOS使用了短字符串优化(SSO),程序员要看哪些源码的数据内存结构分为长字符串和短字符串模式,通过位标志判断。char*构造器和拷贝构造根据字符串类型执行不同初始化方法,十元众筹网站源码大全右值拷贝利用转移语义节省内存。

       3. tpstl string (腾讯自研)

       tpstl string简化了STL,使用内存池管理内存,其构造和赋值操作均在内存池上进行,有助于解决跨库问题。

       结论

       理解这些string源码实现有助于开发者定位和解决实际问题。作者将继续分享更多案例和调试策略,有兴趣的开发者可加入官方QQ交流群:,获取更多技术分享。

学生信息管理系统源代码

       void Sort(student *&head, char type,char maxOrMin)

       {

       /*参数说明:

       type=='1' 按 语文 排列

       type=='2' 按 数学 排列

       type=='3' 按 英语 排列

       type=='4' 按 总分 排列

       type=='5' 按 平均分 排列

       type=='6' 按 座号 排列

       */

       student *pHead,*pH;

        pHead=pH=head;

       int len=GetLength(head);

        float *array=new float[len];

       int i;

       int x=0;

       float num=0;

       while(head)

       {

        Count(head);

       if(type=='1')

       {

        num=head->chinaNum;

       }

       else if(type=='2')

       {

        num=head->mathNum;

       }

       else if(type=='3')

       {

        num=head->englishNum;

       }

       else if(type=='4')

       {

        num=head->result;

       }

       else if(type=='5')

       {

        num=head->average;

       }

       else if(type=='6')

       {

        num=head->num;

       }

       array[x]=num;

       x++;

       head=head->next;

       }

       head=pHead;

       if(maxOrMin=='1')

       {

        for( i=1; i<len; i++)

        {

        for(int j=0; j<len-i; j++)

        {

        if(array[j]<array[j+1])

        {

        float num;

        num=array[j];

        array[j]=array[j+1];

        array[j+1]=num;

        }

        }

        }

        }

       else

       {

        for( i=1; i<len; i++)

        {

        for(int j=0; j<len-i; j++)

        {

        if(array[j]>array[j+1])

        {

        float num;

        num=array[j];

        array[j]=array[j+1];

        array[j+1]=num;

        }

        }

        }

       }

       int pos=1;

       for(i=0; i<len; i++)

       {

        head=pHead;

        while(head)

        {

        if(type=='1')

        {

        num=head->chinaNum;

        }

        else if(type=='2')

        {

        num=head->mathNum;

        }

        else if(type=='3')

        {

        num=head->englishNum;

        }

        else if(type=='4')

        {

        num=int(head->result);

        }

        else if(type=='5')

        {

        num=int(head->average);

        }

        else if(type=='6')

        {

        num=int(head->num);

        }

        int n=0;

        if(int(array[i])==int(num))

        {

        if(int(array[i])!=int(array[i+1]))

        {

        if(n==0)

        {

        n=pos;

        }

        head->pos=pos;

        pos++;

        }

        else

        {

        head->pos=n;

        }

        }

        head=head->next;

        }

       }

       head=pH;

       delete []array;

       }

       void Count(student *&head)

       {

       head->result=head->chinaNum+head->englishNum+head->mathNum;

       head->average=head->result/3;

       }

       void DeleteAll(student* &head)

       {

       student *cp,*np;

        cp=head;

       while(cp)

       {

        np=cp->next;

        delete cp;

        cp=np;

       }

       head=NULL;

       }

       void ChaXun(string str,student *head)

       {

       Sort(head,'4','1');

       cout<<"欢迎使用查询功能"<<endl<<endl;

       cout<<"请输入你要按什么查询 1->一般查询 2->查找最多 3->查找最少"<<endl;

       string s;

       cin>>s;

       while(s[0]!='1'&&s[0]!='2'&&s[0]!='3')

       {

        cout<<"你输入错误,请重新输入."<<endl;

        cin>>s;

       }

       if(s[0]=='1')

       {

        cout<<"按什么查询?"<<endl;

        cout<<"1->姓名 2->座号 3->语文成绩 4->数学成绩 "

        <<"5->英语成绩 6->总分 7->平均分 8->排名"<<endl;

        cin>>str;

        while(str[0]!='1' && str[0]!='2' &&

        str[0]!='3' && str[0]!='4' &&

        str[0]!='5' && str[0]!='6' &&

        str[0]!='7' && str[0]!='8' )

        {

        cout<<"你输入错误,请重新输入."<<endl;

        cin>>str;

        }

        char findStr[];

        cout<<"请输入要查找的关键字或关键数:"<<endl;

        cin>>findStr;

        switch(str[0])

        {

        case '1':

        Find(head,findStr,'1');

        break;

        case '2':

        Find(head,findStr,'2');

        break;

        case '3':

        Find(head,findStr,'3');

        break;

        case '4':

        Find(head,findStr,'4');

        break;

        case '5':

        Find(head,findStr,'5');

        break;

        case '6':

        Find(head,findStr,'6');

        break;

        case '7':

        Find(head,findStr,'7');

        break;

        case '8':

        Find(head,findStr,'8');

        break;

        }

       }

       else if(s[0]=='2')

       {

        cout<<"请输入要按什么查询?"<<endl;

        cout<<"1->语文成绩 2->数学成绩 "

        <<"3->英语成绩 4->总分 5->平均分 6->排名"<<endl;

        string s;

        cin>>s;

        switch(s[0])

        {

        case '1':

        FindMaxOrMin(head,'1','1');

        break;

        case '2':

        FindMaxOrMin(head,'2','1');

        break;

        case '3':

        FindMaxOrMin(head,'3','1');

        break;

        case '6':

        FindMaxOrMin(head,'6','1');

        break;

        case '5':

        FindMaxOrMin(head,'5','1');

        break;

        default:

        FindMaxOrMin(head,'4','1');

        break;

        }

       }

       else if(s[0]=='3')

       {

        cout<<"请输入要按什么查询?"<<endl;

        cout<<"1->语文成绩 2->数学成绩 "

        <<"3->英语成绩 4->总分 5->平均分 6->排名"<<endl;

        string s;

        cin>>s;

        switch(s[0])

        {

        case '1':

        FindMaxOrMin(head,'1','2');

        break;

        case '2':

        FindMaxOrMin(head,'2','2');

        break;

        case '3':

        FindMaxOrMin(head,'3','2');

        break;

        case '6':

        FindMaxOrMin(head,'6','2');

        break;

        case '5':

        FindMaxOrMin(head,'5','2');

        break;

        default:

        FindMaxOrMin(head,'4','2');

        break;

        }

       }

       }

       void ZengJia(string str, student* &head)

       {

       student *pNew=new student;

       cout<<"欢迎使用增加功能"<<endl<<endl;

       cout<<"请输入新学生的名字 :"<<endl;

       cin>>pNew->name;

       cout<<"请输入新学生的座号 :"<<endl;

       cin>>pNew->num;

       cout<<"请输入他的语文分数 :"<<endl;

       cin>>pNew->chinaNum;

       cout<<"请输入他的数学分数"<<endl;

       cin>>pNew->mathNum;

       cout<<"请输入他的英语分数"<<endl;

       cin>>pNew->englishNum;

       cout<<"插入记录的 (1->最前面 2->最后面)"<<endl;

       cin>>str;

       while(str[0]!='1' && str[0]!='2')

       {

        cout<<"你输入错误,请重新输入."<<endl;

        cout<<"插入记录的 (1->最前面 2->最后面)"<<endl;

        cin>>str;

       }

       if(str[0]=='1')

       {

        InsertFront(head,pNew);

       }

       else if(str[0]=='2')

       {

        InsertRear(head,pNew);

       }

       cout<<"新学生增加成功."<<endl;

       }

       void ShanChu(string str, student *&head)

       {

       char delStr[];

       cout<<"欢迎使用删除功能"<<endl<<endl;

       cout<<"1->查询删除 2->全部删除"<<endl;

       cin>>str;

       while(str[0]!='1' && str[0]!='2')

       {

        cout<<"输入错误,请重新输入."<<endl;

        cin>>str;

       }

       if(str[0]=='1')

       {

        cout<<"请输入要删除的关键字"<<endl;

        cin>>delStr;

        cout<<"1->删除第一条找到的记录 2->删除所有找到的记录"<<endl;

        cin>>str;

        while(str[0]!='1'&&str[0]!='2')

        {

        cout<<"你输入错误,请重新输入."<<endl;

        cin>>str;

        }

        cout<<"你真的要删除吗? 1->删除 2->取消"<<endl;

        string s;

        cin>>s;

        if(str[0]=='1')

        {

        if(str[0]=='1')

        {

        Delete(head,delStr,1);

        }

        else

        {

        Delete(head,delStr,2);

        }

        }

        else

        {

        cout<<"你已经取消删除了."<<endl;

        }

       }

       else

       {

        cout<<"你真的要删除全部数据吗?这样会使你的数据全部丢失哦."<<endl;

        cout<<"1->全部删除 2->取消删除"<<endl;

        cin>>str;

        if(str[0]=='1')

        {

        DeleteAll(head);

        }

        else

        {

        cout<<"你已经取消删除了."<<endl;

        }

       }

       }

       void PaiMing(string str, student* head)

       {

       string s;

       cout<<"欢迎使用排名功能"<<endl<<endl;

       cout<<"排名选择: 1->升序 2->降序"<<endl;

       cin>>s;

       cout<<"请输入要按什么排名?"<<endl;

       cout<<"1->语文成绩 2->数学成绩 3->英语成绩 "

        <<"4->总分 5->平均分 6->座号"<<endl;

       cin>>str;

       while(str[0]!='1' && str[0]!='2' &&

        str[0]!='3' && str[0]!='4' &&

        str[0]!='5' && str[0]!='6' )

       {

        cout<<"你输入错误,请重新输入."<<endl;

        cin>>str;

       }

       cout<<"姓名:"<<setw(8)<<"座号:"<<setw()

        <<"语文分数:"<<setw() <<"数学分数:"

        <<setw()<<"英语分数:"<<setw(8)<<"总分数:"

        <<setw(8)<<"平均分:"<<setw(6)<<"名次:"<<endl<<endl;

       if(s[0]=='2')

       {

        switch(str[0])

        {

        case '1':

        Sort(head,'1','1');

        break;

        case '2':

        Sort(head,'2','1');

        break;

        case '3':

        Sort(head,'3','1');

        break;

        case '4':

        Sort(head,'4','1');

        break;

        case '5':

        Sort(head,'5','1');

        break;

        case '6':

        Sort(head,'6','1');

        break;

        }

       }

       else

       {

        switch(str[0])

        {

        case '1':

        Sort(head,'1','2');

        break;

        case '2':

        Sort(head,'2','2');

        break;

        case '3':

        Sort(head,'3','2');

        break;

        case '4':

        Sort(head,'4','2');

        break;

        case '5':

        Sort(head,'5','2');

        break;

        case '6':

        Sort(head,'6','2');

        break;

        }

       }

        ShowList(head);

       return ;

       }

       void XianShi(string str, student *head)

       {

       Sort(head,'4','1');

       string s;

       cout<<"欢迎使用显示功能"<<endl;

       cout<<"1->显示全部记录 2->显示记录数目"<<endl;

       cin>>s;

       if(s[0]=='2')

       {

        cout<<"记录的数目是:"<<GetLength(head)<<endl;

       }

       else

       {

        ShowList(head);

       }

       }

       void XuiGai(string str, student *&head)

       {

       string s;

       student *std;

       cout<<"欢迎使用修改功能"<<endl;

       cout<<"请输入你要按什么查询"<<endl;

       cout<<"1->姓名 2->座号 3->语文成绩 4->数学成绩 "

        <<"5->英语成绩 "<<endl;

       cin>>str;

       while(str[0]!='1' && str[0]!='2' &&

        str[0]!='3' && str[0]!='4' &&

        str[0]!='5' )

       {

        cout<<"你输入错误,请重新输入."<<endl;

        cin>>str;

       }

       char findStr[];

       cout<<"请输入要查找的关键字或关键数:"<<endl;

       cin>>findStr;

       switch(str[0])

       {

       case '1':

        std=Find(head,findStr,'1');

        Reword(std);

        break;

       case '2':

        std=Find(head,findStr,'2');

        Reword(std);

        break;

       case '3':

        std=Find(head,findStr,'3');

        Reword(std);

        break;

       case '4':

        std=Find(head,findStr,'4');

        Reword(std);

        break;

       case '5':

        std=Find(head,findStr,'5');

        Reword(std);

        break;

       }

       Write(head);

       if(std!=NULL)

       {

        cout<<"修改成功."<<endl;

       }

       }

       int Run()

       {

       bool isLoad=false;

       student* head=NULL;

       student *pNew=new student;

       head=Read();

       SetTitle(false);

       if(head!=NULL)

       { Sort(head,'5','1');

        Count(head);

       }

       string str;

       SetTitle(false);

       cout<<" 欢迎使用学生管理系统 "<<endl<<endl;

       cout<<" 1->用户登陆 2->退出程序 "<<endl;

       cin>>str;

       if(str[0]=='2')

       {

        AboutMe();

        return 0;

       }

       else

       {

        isLoad=Enter('1');

        system("cls");

        if(isLoad==true)

        {

        SetTitle(true);

        cout<<" 恭喜,您输入的密码正确.可以对本系统的进行任何操作."<<endl;

        }

        else

        {

        cout<<" Sorry,您输入的密码错误.你不能修改本系统的任何内容."<<endl;

        }

       }

       begin:

       cout<<endl<<endl;

       cout<<" 欢迎使用学生管理系统 "<<endl<<endl;

       cout<<" 1->增加功能 2-查询功能"<<endl;

       cout<<" 3->删除功能 4-排名功能"<<endl;

       cout<<" 5->显示功能 6-修改功能"<<endl;

       cout<<" 7->用户设置 8-退出程序"<<endl;

       cout<<"请输入您的选择: "<<endl;

       cin>>str;

       while(str[0]!='8')

       {

        if(isLoad==true && head!=NULL)

        {

        cout<<endl<<endl;

        if(str[0]=='1')

        {

        ZengJia(str, head);

        Sort(head,'4','1');

        Write(head);

        }

        else if(str[0]=='2')

        {

        ChaXun(str,head);

        }

        else if(str[0]=='3')

        {

        ShanChu(str,head);

        Sort(head,'4','1');

        Write(head);

        }

        else if(str[0]=='4')

        {

        PaiMing(str,head);

        }

        else if(str[0]=='5')

        {

        XianShi(str,head);

        }

        else if(str[0]=='6')

        {

        XuiGai(str,head);

        Write(head);

        }

        else if(str[0]=='7')

        {

        cout<<"欢迎使用用户修改功能"<<endl;

        isLoad=Enter('2');

        }

        else if(str[0]=='8')

        {

        AboutMe();

        return 0;

        }

        else

        {

        cout<<"你输入错误,请重新输入."<<endl;

        goto begin;

        }

        }

        else if(isLoad==false && head!=NULL)

        {

        if(str[0]=='2')

        {

        ChaXun(str,head);

        }

        else if(str[0]=='4')

        {

        PaiMing(str,head);

        }

        else if(str[0]=='5')

        {

        XianShi(str,head);

        }

        else

        {

        cout<<"你不是管理员,不能进行此项功能."<<endl;

        cout<<"你只能进行 查询功能 显示功能 排名功能"<<endl;

        }

        }

        else if( head==NULL && isLoad==true)

        {

        cout<<"系统检查到你没有任何记录,不能进行任何操作,只能增加记录."<<endl;

        ZengJia(str, head);

        Write(head);

        head=Read();

        }

        else if( head==NULL && isLoad==false)

        {

        cout<<"因为你没有登陆,系统又检查到你没有任何记录,你不能进行任何操作."<<endl;

        }

        cout<<endl<<endl;

        cout<<"按任何键继续进行操作."<<endl;

        getchar();

        getchar();

        system("cls");

        goto begin;

       }

       AboutMe();

       return 0;

       }

       void SetTitle(bool isLoad)

       {

       HWND hwnd=GetForegroundWindow();

       if(isLoad==false)

       {

        SetWindowText(hwnd," 学生管理系统(没有登陆)");

       }

       else

       {

        SetWindowText(hwnd," 学生管理系统(已经登陆)");

       }

       system("color a");

       }

       void AboutMe()

       {

       char*pStr= " ┃ \n"

        " ┃ \n"

        " ┏━━━━┻━━━━┓ \n"

        " ┃ 关于作者 ┃ \n"

        " ┏━━━━┻━━━━━━━━━┻━━━━┓\n"

        " ┃ ┃\n"

        " ┃ Aauthor:

【本文网址:http://hld.net.cn/html/61e99598943.html 欢迎转载】

copyright © 2016 powered by 皮皮网   sitemap