当前位置 博文首页 > liuguangshibei的博客:QT学习——day3

    liuguangshibei的博客:QT学习——day3

    作者:[db:作者] 时间:2021-08-13 12:55

    QT学习——day3

    字符串的动态拼接:

    QSrting类的构造函数,arg()函数的重载,qDebug实现在终端输出。

     QString str=QString("(%1)有(%2)个徒弟,分别是(%3),(%4)").arg("贺子奇").arg("2").arg("大明").arg("二明");
     qDebug()<<"这就是我的徒弟:"<<str;
    

    输出结果为:这就是我的徒弟:“(贺子奇)有(2)个徒弟,分别是(大明),(二明)”

    字符串的长度

    QString中长度是字符个数,一个汉字算一个字符

    QByteArray中长度是字符串占用的字节数,一个汉子3个字节

    QString a;

    a.length();//返回字符串的长度。

    QVarianat类

    重载实现字符串及各类数字、字符的加减与拼接;

      QVariant str1;
        QVariant str2=dataPlus("hzq","love");
        int a;
        a=dataPlus(10,20).toInt();
        str1=a;
        qDebug()<<dataPlus("hzq","love").toString()<< str1.toInt();
    //str1.to类型不能直接进行赋值,但是可以在QVariant赋值后进行随意转换。
    
    QVariant Mywidget::dataPlus(QVariant a, QVariant b)
    {
        QVariant ret;
        if(a.type()==QVariant::Int&&b.type()==QVariant::Int)
        {
            ret=QVariant(a.toInt()+b.toInt());
        }
        else if(a.type()==QVariant::String&&b.type()==QVariant::String)
        {
            ret.setValue(a.toString()+b.toString());
        }
        return ret;
    }
    
    
    #include <iostream>
    #include<string>
    using namespace std;
    class CExample {
    public:
        int g=8;
        float h=8.8;
        //构造函数初始化列表
        CExample()
        {
            cout<<term(10, 20);//直接在构造函数中调用成员函数。
        }
        int term(int,int);
    };
    int CExample::term(int a,int b)
    {
        int c;
        c = a + b;
        return c;
    }
    int main()
    {
        CExample m;
        return 0;
    }
    

    C++之vector的理解

    #include <vector>
    #include <string>
    

    和string一样,也算是一种容器,而且同属于STL(standard template library)里的好基友

    1.初始化向量

            vector<int> a ;                                //声明一个int型向量a
            vector<int> a(10) ;                            //声明一个初始大小为10的向量
            vector<int> a(10, 1) ;                         //声明一个初始大小为10且初始值都为1的向量
            vector<int> b(a) ;                             //声明并用向量a初始化向量b
            vector<int> b(a.begin(), a.begin()+3) ;        //将a向量中从第0个到第2个(共3个)作为向量b的初始值
    

    也可以用数组来初始化向量

            int n[] = {1, 2, 3, 4, 5} ;
            vector<int> a(n, n+5) ;              //将数组n的前5个元素作为向量a的初值
            vector<int> a(&n[1], &n[4]) ;        //将n[1] - n[4]范围内的元素作为向量a的初值
    

    2.向量元素的输出和访问

    普通的

    [复制代码](javascript:void(0)😉

     1     #include<iostream>
     2     #include<vector>
     3 
     4     using namespace std ;
     5 
     6     int main()
     7     {
     8         vector<int> a(10, 0) ;      //大小为10初值为0的向量a
     9 
    10         //对其中部分元素进行输入
    11         cin >>a[2] ;
    12         cin >>a[5] ;
    13         cin >>a[6] ;
    14 
    15         //全部输出
    16         int i ;
    17         for(i=0; i<a.size(); i++)
    18             cout<<a[i]<<" " ;
    19 
    20         return 0 ;
    21     }
    

    [复制代码](javascript:void(0)😉

    在输出上,还可以使用迭代器,类似城管一样,一个一个不漏地弄出来vector里面的元素

    比如在这种申明形式下

    vector <int> a(b.begin(),b.begin()+3);
    

    中,可以使用城管iterator

        //全部输出
        vector<int>::iterator t ;
        for(t=a.begin(); t!=a.end(); t++)
            cout<<*t<<" " ;
    

    3.向量的基本操作

    [复制代码](javascript:void(0)😉

        1>. a.size()                 //获取向量中的元素个数
    
    
        2>. a.empty()                //判断向量是否为空
    
    
        3>. a.clear()                //清空向量中的元素
    
    
        4>. 复制
            a = b ;            //将b向量复制到a向量中
    
    
        5>. 比较
            保持 ==、!=、>、>=、<、<= 的惯有含义 ;
            如: a == b ;    //a向量与b向量比较, 相等则返回1
    
    
        6>. 插入 - insert
            ①、 a.insert(a.begin(), 1000);            //将1000插入到向量a的起始位置前
            
            ②、 a.insert(a.begin(), 3, 1000) ;        //将1000分别插入到向量元素位置的0-2处(共3个元素)
            
            ③、 vector<int> a(5, 1) ;
                vector<int> b(10) ;
                b.insert(b.begin(), a.begin(), a.end()) ;        //将a.begin(), a.end()之间的全部元素插入到b.begin()前
    
    
        7>. 删除 - erase
            ①、 b.erase(b.begin()) ;                     //将起始位置的元素删除
            ②、 b.erase(b.begin(), b.begin()+3) ;        //将(b.begin(), b.begin()+3)之间的元素删除
    
    
        8>. 交换 - swap
            b.swap(a) ;            //a向量与b向量进行交换
    

    [复制代码](javascript:void(0)😉

    4.二维向量

    vector< vector<int> > b(10, vector<int>(5));        //创建一个10*5的int型二维向量
    

    输入输出的方式

    [复制代码](javascript:void(0)😉

     8         vector< vector<int> > b(10, vector<int>(5, 0)) ;
     9 
    10         //对部分数据进行输入
    11         cin>>b[1][1] ;
    12         cin>>b[2][2] ;
    13         cin>>b[3][3];
    14 
    15         //全部输出
    16         int m, n ;
    17         for(m=0; m<b.size(); m++)           //b.size()获取行向量的大小
    18         {
    19             for(n=0; n<b[m].size(); n++)    //获取向量中具体每个向量的大小
    20                 cout<<b[m][n]<<" " ;
    21             cout<<"\n" ;
    22         }
    23 
    

    for(m=0; m<b.size(); m++) //b.size()获取行向量的大小
    18 {
    19 for(n=0; n<b[m].size(); n++) //获取向量中具体每个向量的大小
    20 cout<<b[m][n]<<" " ;
    21 cout<<"\n" ;
    22 }
    23

    
    
    cs
    下一篇:没有了