静态数组太浪费内存不容易判断,想了一下,需要用动态数组,查了一下函数,记录一下,怕几天后自己就忘记了。
更新写在前边!!一个坑!!
vector中size()返回类型是:size_type,Member type size_type is an unsigned integral type,是无符号整数
所以在直接使用A[size() - 1]
时存在隐患,容易引起越界!!!!!!
故使用之前先预定义一下!以下四种方式均可。
int n = A.size() - 1;
int(A.size() - 1)
int(A.size()) - 1
static_cast<int>(A.size())
1、动态数组vector,头文件:#include
2、命名空间using namespace std;
3、声明
vector <int> A;//int类型的动态数组A
vector <char> B;//char类型动态数组B
vector <node> C;//结构体node类型动态数组C(node是结构体名)
4、构造函数,声明时初始化
vector <int> A(a,b);//声明A,在A中初始化,a个b
vector <int> B(a); //声明B,在B中初始化a个0
//声明C,用A的全部内容为C初始化,C = A,两个数组一摸一样
vector <int> C(A);
//声明D,截取A的下标A[A.begin()+l]到A[A.begin()+m,A.end()-n]的内容为C初始化
vector <int> D(A.begin()+m,A.end()-n);
5、析构函数
vector <B> A;//声明B种数据类型的A
A.~vector<B>(); //析构函数
6、赋值
vector <int> A;
A.push_back(a);//在A的末尾插入a
//在下标k的前面插入数a,k之后的数依次后退一位下标从0开始
A.insert(A.begin()+k,a);
A.insert(A.begin()+k,p,a);//在下标k前面插入p个a
7、删除
vector <int> v;
...
v.pop_back()//删除最后一个元素
v.erase(v.begin()+k);//删除下标为k的数,返回下一个位置的下标
v.erase(v.begin()+l,v.end()-r);//删除下标[l,v.end()-r)的元素
7、常用函数
以vector <int> v为例:
v[i]或v.at(i)//返回v[i]的值
v.size();//返回v数组元素总个数
v.front();//返回v数组第一个元素的值
v.back();//返回v数组最后一个元素的值
v.clear();//清空v数组
v.begin();//返回v数组第一个数的地址
v.end();//返回v数组最后一个数之后的地址
v.empty();//判断v数组是否为空,是空则返回1(true),非空(有元素)则返回0(false)
v.swap(v1);//v1是另一个动态数组,将v和v1元素互换
swap(v,v1);//同上swap
…
Mat矩阵拼接hconcat(A, c, Ac);//A和c左右拼接得到Ac
vconcat(A, cc, Acc);//A和cc上下拼接得到Acc
具体使用:
上面对A有定义,A是五行四列矩阵。
Mat c = Mat::zeros(5, 1, CV_64F);
Mat cc = Mat::zeros(1, 4, CV_64F);
Mat Ac,Acc;
hconcat(A, c, Ac);
vconcat(A, cc, Acc);
cout <<"左右拼接:"<< Ac<<endl;
cout <<"上下拼接:" << Acc << endl;
Mat A;
if(A.empty())//判断是否为空
cout<<"yes,empty"<<endl;
if(!A.data)//判断有无数据
cout<<"yes,not have data"<<endl;
今日进度
今日进度暂存,明天需要做的:写完这个程序,基本函数已经写完,明天写遍历、调用和可视化,今日懒散,写的太少。
//A
int idex = Get_Matrow("0000.txt");//获取要读的编号
Mat date = Mat::zeros(idex, 5, CV_64F);//建立模具承载读的文件
Mat A = Mat::zeros(idex, 4, CV_64F);//建立模具承载需要的数据
ReadFile("0000.txt", date);//读文件放在模具
Translate(date, A);//转换为需要的数据放在模具
//B
int idex2 = Get_Matrow("0001.txt");
Mat date2 = Mat::zeros(idex2, 5, CV_64F);
Mat B = Mat::zeros(idex2, 4, CV_64F);
ReadFile("0001.txt", date2);
Translate(date2, B);
//countA
Mat countA;
Mat a = Mat::zeros(A.rows, 1, CV_64F);
hconcat(A, a, countA);
for (int i = 0; i < countA.rows; i++)
countA.at<double>(i, countA.cols - 1) = i + 1;
//countB
Mat countB;
Mat aa = Mat::zeros(A.rows, 1, CV_64F);
hconcat(B, aa, countB);
OneImg(countA, A, B, countB);
cout << "countB = "<< countB << endl;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)