天天看點

QT學習——day3

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.向量元素的輸出和通路

普通的

[

QT學習——day3

](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     }
           

[

QT學習——day3

](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.向量的基本操作

[

QT學習——day3

](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向量進行交換
           

[

QT學習——day3

](javascript:void(0)😉

4.二維向量

vector< vector<int> > b(10, vector<int>(5));        //建立一個10*5的int型二維向量
           

輸入輸出的方式

[

QT學習——day3

](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

繼續閱讀