QtC++中声明、定义和初始化⼀维、⼆维数组(vector容器)(⼀)vector容器
Qt与C++的关系
Qt是在C++的基础上将UI界⾯上的控件封装成类
因此C++上的代码同样适⽤于Qt
使⽤vector容器时,加⼊以下代码就可以了
include <vector>
using namespace std;
变量、函数的声明、定义
声明:不需要编译器为其分配内存空间;
定义:要求分配内存空间。
声明是告诉编译器,这个变量或函数已经在程序中存在。
对变量⽽⾔,声明和定义⼀起进⾏:
int a;//完成声明和定义
对函数⽽⾔,声明和定义可以分离:
声明:
void data_func();//可以对⼀个变量多次声明,不会报错
void data_func();
void data_func();
定义:
void data_func(){};
⼀维数组的声明和初始化
1、默认初始化
vetor为空,容器中没有元素,没有分配内存空间。(类似函数的声明)
这种初始化⽅式适⽤于元素个数未知,需要在程序中动态添加的情况。
vector<double> g_best;
2、拷贝初始化
vector<int>list2(list);
vector<int> list2 = list;
两种⽅式等价 ,list2 初始化为 list 的拷贝
list 必须与 list2 类型相同,也就是同为 int 的 vector 类型,list2 将具有和 list 相同的容量和元素。
3、拷贝部分内容初始化
vector<int>list3(list.begin()+2, d()-1);
读取list容器部分内容
这种初始化⽅法特别适合于获取⼀个序列的⼦序列。
4、默认值初始化
⼀维数组g_best,长度为psize,默认为0;
g_best为数组名,psize为默认数组长度,默认初始值为0 vector<double>g_best(psize);
5、指定值初始化
⼀维数组g_best,长度为psize,默认为N;
g_best为数组名,psize为默认数组长度,默认初始值为N vector<double>g_best(psize,N);
6、直接初始化
vector<double> g_best ={1.2,3};
7、静态⼀维数组
int a[3]={1.2,3};
6、试验
vector<double> n;
qDebug()<<"n 为 "<< n;
vector<double>m(5);
qDebug()<<"m 为 "<< m;
vector<double>x(5,3);//所有的值都是3
qDebug()<<"x 为 "<< x;
输出
n 为 std::vector()
m 为 std::vector(0,0,0,0,0)
x 为 std::vector(3,3,3,3,3)
数组全部赋值为1⼆维数组的声明和初始化
1、默认值初始化
⼆维数组swp[][],n⾏ m列,默认初始值为0
vector<vector<int>>swp(n,vector<int>(m));
//后⾯两个> >中间的空格不能省略
pop为数组名,sizepop为⾏,psize为列,默认初始值为0 vector<vector<double>>pop(sizepop, vector<double>(psize)); //定义⼆维数组pop[][],sizepop⾏ psize列
2、指定值初始化
pop为数组名,sizepop为⾏,psize为列,默认初始值为N vector<vector<double>>pop(sizepop, vector<double>(psize,N)); //初始化为零,程序运⾏会数组赋值
3、静态初始化
<vector<double> pop ={{1,2,3},{1,2,3}};
//和⼀维数组类似
4、试验
vector<vector<double>> n;
qDebug()<<"n 为 "<< n;
array<vector<double>,5>x();//此处不加括号会报错,尽量⽤vector⽽不是⽤array qDebug()<<"x 为 "<< x;
vector<vector<double>>m(2,vector<double>(3));
qDebug()<<"m 为 "<< m;
vector<vector<double>>x(2,vector<double>(3,1));//所有的值都是1
qDebug()<<"x 为 "<< x;
输出
n 为 std::vector()
x 为true
m 为 std::vector(std::vector(0,0,0), std::vector(0,0,0))
x 为 std::vector(std::vector(1,1,1), std::vector(1,1,1))
注意
1. vector容器需要以at、pushback进⾏赋值,不可以⽤赋值号=
// vector<double> x_num;//容器不可以使⽤=进⾏赋值
int x_num =0;
x_num = ui->lE_x->text().toDouble();
2. at()函数作为索引,必须作⽤于初始化过的数组;
空的数组使⽤at()会导致数组越界
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论