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