当前位置 博文首页 > liuguangshibei的博客: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();//返回字符串的长度。
重载实现字符串及各类数字、字符的加减与拼接;
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;
}
#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