C++中利用vector来处理文本中保存的数据

来源:互联网 发布:桃源网络硬盘5.8 破解 编辑:程序博客网 时间:2024/04/27 00:07

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

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

代码(Matlab)

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

生成的文本如下

                                              

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

[cpp] view plaincopy
  1. #include <iostream>  
  2. #include <fstream>  
  3. #include <string>  
  4. #include <iomanip>  
  5. #include <vector>  
  6. #include <stdlib.h>  
  7.   
  8. using   std::string;  
  9. using   std::vector;  
  10. using namespace std;  
  11.   
  12. //用来测试文件的读写操作,输入输出文件均为保存在程序根目录下的txt文件  
  13. int main()  
  14. {  
  15.     ifstream    infile; //infile是一个文件流,因此其实还是对流进行的操作  
  16.     ofstream    outfile;//outfile也是一个文件流,用来操作输出文件  
  17.     infile.open("D:\\\workspace\\cpp\\fileIOTest\\dataIn.txt");  
  18.     vector<int> data_vector;  //用来保存文本中数据的向量  
  19.     vector<int>   out_vector;     //用来保存输出结果的向量  
  20.     vector<int>   temp_vector;    //缓存向量  
  21.     int temp;  
  22.     string  message;  
  23.   
  24.     if(!infile)     //判断是否存在ifstream infile  
  25.     {  
  26.         cout<<"读入文件不存在"<<endl;  
  27.     }  
  28.   
  29.     if (infile.is_open())   //判断文件流是否处于打开状态  
  30.     {  
  31.         while (infile.good()&&!infile.eof())  
  32.         {  
  33.             infile>>temp;  
  34.             data_vector.push_back(temp);    //将数据读入到data_vector  
  35.         }  
  36.     }  
  37.     infile.close();  
  38.   
  39.     for (vector<int>::size_type i=0;i!=(data_vector.size()-1);i++)  
  40.     {  
  41.         cout<<"第"<<i+1<<"项的值是:"<<data_vector[i]<<endl;  
  42.     }  
  43.   
  44.     temp_vector=data_vector;    //避免修改到了data_vector  
  45.       
  46.     cout<<"*************************************************************"<<endl;  
  47.     cout<<"文件的写操作"<<endl;  
  48.   
  49.     //对文本中的数据进行操作  
  50.     for (vector<int>::size_type i=0;i!=(temp_vector.size()-1);++i)  
  51.     {  
  52.         temp_vector[i]=temp_vector[i]*temp_vector[i]+1; //对文本中数据进行简单处理,即:y=x.^2+1  
  53.     }  
  54.   
  55.     //计算结果传递给out_vector  
  56.     out_vector=temp_vector;  
  57.   
  58.     for (vector<int>::size_type i=0;i!=(out_vector.size()-1);i++)  
  59.     {  
  60.         cout<<"第"<<i+1<<"项的值是:"<<out_vector[i]<<endl;  
  61.     }  
  62.   
  63.     outfile.open("D:\\\workspace\\cpp\\fileIOTest\\dataOut.txt");  //打开输出文件  
  64.     for (vector<int>::iterator    iter=out_vector.begin();iter!=(out_vector.end()-1);++iter)  
  65.     {  
  66.         char    tmp[5];  
  67.         itoa(*iter,tmp,10);     //将10进制的数转换成string类型  
  68.         message.append(tmp);  
  69.         message.append(" ");  
  70.     }  
  71.     outfile<<message;  
  72.     outfile.close();        //关闭输出文件  
  73. }  

最终的到的结果如下:

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

转自:http://blog.csdn.net/isbnhao/article/details/8052409

原创粉丝点击