qt C++ 二维结构体Vector(QVector)嵌套

二维结构体类型vector

vector<vector < poly>> ret;

poly是我定义的结构体类型,在开发过程中遇到了需要这样的定义,因此在这里进行记录和分享。因为涉及到qt的部分调用和库,所以在涉及qt表达时我会作标明。以下是部分声明:

#include <iostream>
#include <vector>
//#include <QVector>
#include <algorithm>
#include <QString>
#include <QStringList>

using namespace std;

struct poly {
	QString type;
	QString x,y,z;
};
struct stretched{ 
	vector<vector<poly> > in_poly;
};
struct stretched ret;
vector <poly> ttt;  //用来进行中间转存的vector

定义二维vector

vector<vector<int>> ret;//错误的定义方式
vector<vector<int> > ret;//正缺的定义方式,注意>和>之间的空格。

基本函数叙述

//正确的插入方式
vector<vector<int> > A;
//A.push_back里必须是vector,先存一维,再以一维存二维
vector<int> B;
B.push_back(0);
B.push_back(1);
B.push_back(2);
A.push_back(B);
B.clear();
B.push_back(3);
B.push_back(4);
B.push_back(5);
A.push_back(B);

//vector<vector<int> >A中的vector元素的个数
len = A.size();
//vector<vector<int> >A中第i个vector元素的长度
len = A[i].size();

访问二维元素的方式

//如果指定.resize()了外层和内层向量的大小,可用.operator[]进行读和写;
//如果只指定了外层向量大小,就能用push_back()函数进行写,不能用operator[]进行读和写。 

v.resize(n, vector<int>(m));//一次指定内外层vector大小

部分源码

 for (int i = 0;i < ret.n; i++) //ret.n是我需要进行分析的样本总数
{  
      for (; judgment(array_cut, k); k += 4) //judgment是判断规则函数,在这里我传入了一个QStringList进行样本,k是遍历样本的位置
      {
			  in_polythread_cut(array_cut, k, i);//参数存入ret结构体,以二维vector存储,函数在下方
		    //ui.textEdit->append("k:" + QString::number(k)); qt表达的控件输出,用来作为测试点
				 }
			ret.in_poly.push_back(ttt);//推入中转一维不定长数组
			//ui.textEdit->append("k:" + QString::number(k)); 
				 for (int j = 0;j < ttt.size(); j++) //这里是输出,检查是否出错溢出
       {  
					 ui.textEdit->append(ret.in_poly[i][j].type + "," + ret.in_poly[i][j].x + "," + ret.in_poly[i][j].y + "," + ret.in_poly[i][j].z);//显示到qt控件的textEdit
				 }
				ttt.clear();//清除中介vector数据
}
void  readwrite_Stretchedbody::in_polythread_cut(QStringList array_cut, int k, int i) 
{
	poly tmp;  //定义一个结构体,存入一维结构体
	tmp.type = array_cut.at(k);
	tmp.x = array_cut.at(k+1);
	tmp.y = array_cut.at(k+2);
	tmp.z = array_cut.at(k+3);

 //在赋值这一块调了很久,最终还是理清逻辑一层一层推入
 //如果以ret.in_poly[i].push_back(tmp)推入,会导致判断条件函数报错和空间溢出
	ttt.push_back(tmp);
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值