二维结构体类型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);
}