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))

注意

  1. vector容器需要以at、pushback进行赋值,不可以用赋值号=
//    vector<double> x_num;//容器不可以使用=进行赋值
    int x_num = 0;
    x_num = ui->lE_x->text().toDouble();
  1. at()函数作为索引,必须作用于初始化过的数组;
    空的数组使用at()会导致数组越界
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐