淘先锋技术网

首页 1 2 3 4 5 6 7

最近在尝试利用C++做信号处理方面的仿真,于是就涉及到了大量数据的存储。由于在读取数据的时候,并不知道数据的长度,这时候,vector就很好用了,因为vector容器不用知道数组的长度。

首先利用matlab生成一个很简单的整型数组,或者直接复制都行。

代码(Matlab)

clear,clc;
a=[1 2 3 4 5 6 7 8 9];
fid=fopen('D:\\\workspa\\cpp\\fileIOTest\\dataIn.txt','wt');
fprintf(fid,'%g ',a);
fclose(fid);

生成的文本如下

                                              

之后,将文本中的数据读入到文件流中,之后代码如下:

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <vector>
#include <stdlib.h>

using	std::string;
using	std::vector;
using namespace std;

//用来测试文件的读写操作,输入输出文件均为保存在程序根目录下的txt文件
int main()
{
	ifstream	infile;	//infile是一个文件流,因此其实还是对流进行的操作
	ofstream	outfile;//outfile也是一个文件流,用来操作输出文件
	infile.open("D:\\\workspace\\cpp\\fileIOTest\\dataIn.txt");
	vector<int> data_vector;	//用来保存文本中数据的向量
	vector<int>	out_vector;		//用来保存输出结果的向量
	vector<int>	temp_vector;	//缓存向量
	int temp;
	string	message;

	if(!infile)		//判断是否存在ifstream infile
	{
		cout<<"读入文件不存在"<<endl;
	}

	if (infile.is_open())	//判断文件流是否处于打开状态
	{
		while (infile.good()&&!infile.eof())
		{
			infile>>temp;
			data_vector.push_back(temp);	//将数据读入到data_vector
		}
	}
	infile.close();

	for (vector<int>::size_type i=0;i!=(data_vector.size()-1);i++)
	{
		cout<<"第"<<i+1<<"项的值是:"<<data_vector[i]<<endl;
	}

	temp_vector=data_vector;	//避免修改到了data_vector
	
	cout<<"*************************************************************"<<endl;
	cout<<"文件的写操作"<<endl;

	//对文本中的数据进行操作
	for (vector<int>::size_type i=0;i!=(temp_vector.size()-1);++i)
	{
		temp_vector[i]=temp_vector[i]*temp_vector[i]+1;	//对文本中数据进行简单处理,即:y=x.^2+1
	}

	//计算结果传递给out_vector
	out_vector=temp_vector;

	for (vector<int>::size_type i=0;i!=(out_vector.size()-1);i++)
	{
		cout<<"第"<<i+1<<"项的值是:"<<out_vector[i]<<endl;
	}

	outfile.open("D:\\\workspace\\cpp\\fileIOTest\\dataOut.txt");  //打开输出文件
	for (vector<int>::iterator	iter=out_vector.begin();iter!=(out_vector.end()-1);++iter)
	{
		char	tmp[5];
		itoa(*iter,tmp,10);		//将10进制的数转换成string类型
		message.append(tmp);
		message.append(" ");
	}
	outfile<<message;
	outfile.close();		//关闭输出文件
}

最终的到的结果如下:

可以看出,输出文本中数据是输入文本中数据的x.^2+1,这样对于以后的数字信号处理仿真,比如FFT,比如自相关,会有很大的借鉴意义。

欢迎转载,转载请注明出处。