Qt C++中声明、定义和初始化一维、二维数组(vector容器)(一)
变量或函数的声明、定义声明:不需要编译器为其分配内存空间;定义:要求分配内存空间。声明是告诉编译器,这个变量或函数已经在程序中存在。对变量而言,声明和定义一起进行:int a;//完成声明和定义对函数而言,声明和定义可以分离:声明:void data_func();//可以对一个变量多次声明,不会报错void data_func();void data_func();定义:void data_fu
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, list.end() - 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、默认值初始化
二维数组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))
注意
- vector容器需要以at、pushback进行赋值,不可以用赋值号=
// vector<double> x_num;//容器不可以使用=进行赋值
int x_num = 0;
x_num = ui->lE_x->text().toDouble();
- at()函数作为索引,必须作用于初始化过的数组;
空的数组使用at()会导致数组越界
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)