本文的目的是为了介绍如何将多个具有相同结构的数组元素,保存进一个txt文件中。
float x[50] = {一大堆元素};
float y[50] = {一大堆元素};
float Z[50] = {一大堆元素};
float w[50] = {一大堆元素};;
此处我想把几组数组内的值,按照10个一行的形式保存到txt文件中。这个时候就有请 流(stream)
出场。
关于流与文件的操作,请参考:[c++] fstream的使用方法
下面开始展示代码:
当然记得在代码所在的cpp中加:
#include <fstream>
带有注释的代码如下:
//保存优化参数至固定位置
fstream dataEx;
dataEx.open("D:\\...\\Test.txt", ios::out | ios::app);//打开绝对路径下的Test.txt文件,不存在的话就新建一个,ios::out | ios::app表示写出模式,新增值写在原有数值后
//此处是关键,相当于变现实现4个数组保存到另一个数组中
float* opList[4] = { &x[0],&y[0],&z[0],&w[0] };//创建和初始化4个数组的首地址指针数组,optList数组中保存四个数组的首地址。&引用实质是常量指针
//遍历4个数组的首地址
for (int n_optList = 0; n_optList < 4; n_optList++)
{
int n_tmpN = 1;
//txt的对象中输入“数组n”,末尾回车
dataEx << "数组" << n_optList + 1 << endl;
//遍历4个数组中每个数组的值,并按照10个一行进行保存
for (int n_pnt = 0; n_pnt < 50; n_pnt++)
{
float opListTmp = *(opList[n_optList] + n_pnt);//利用取地址内的数据赋值给optListTmp,地址+1指针指向到下一个地址,float为4字节,即16位,VS中的内存显示是按照16位的,因此此处加1即可指向下一个内存(理解的可能有问题,请大家指正)
dataEx << opListTmp << ends;//数据之间用空格隔开
n_pnt++;
//每10个为一行,第十个后的末尾用回车补充
while (n_pnt == 10 * n_tmpN)
{
dataEx << endl;//第十个后的末尾用回车补充
n_tmpN++;
}
n_pnt--;//++又--是为了逻辑要求
}
}
dataEx.close();//写入完成后必须关闭才可以正常保存
最终的效果就类似于下边的格式:
数组1
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
数组2
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
数组3
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
数组4
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
核心:
利用引用和指针将数组的首地址存入新的数组,并利用指针进行访问。
float* opList[4] = { &x[0],&y[0],&z[0],&w[0] };
float opListTmp = *(opList[n_optList] + n_pnt);