C++外部文件读取相关操作
2016-07-28 21:48
781 查看
今天我们首先要解决的问题是使用C++进行外部文件夹的读取。
我们在实现这些算法的过程中,用到的图的存储结构(目前)只是涉及到两种 邻接链表存储结构和邻接矩阵存储结构。其中用到较多的还是邻接链表的形式。
在我们进行图的各种操作之前,我们必须先要创建一个图。因为后期我们小组要对每个人实现的算法进行比较,我们决定使用统一的图(具有相同的结点个数和相同的边),因此引出了我遇到的第一个问题:如何将txt文件里面的数据读取出来。
首先我们先来分析txt文档里面存储的数据结构:
txt文档的第一行数字为图中结点的个数,此后每一行体表一条边,第一个int数字为边的起点,后一个数字为边的终点。我们可以发现,数据的存储结构相对于之前写IL算法时的数据集结构要简单的多,所以相应的操作也就少了,拿uniprot150m.txt数据集来说整个文件有293MB的大小,我们使用getline()方法就可以完成,时间消耗个人感觉比较多,读入文件且创建图的部分代码如下:
以上代码就可以完成我们读取txt文件并且创建一个图的过程,当然这种读取的方法是要慢一点,还有一种是利用fscanf()函数来完成的,时间相对直接使用getline()方法有部分提高,后来又发现另一种方法,还是直接上代码来理解,如下:
目前为止一直使用这种方法读取,简单易操作,而且速度也不慢,暂时没有发现更好的读取方法,现将代码链接粘上点击下载
我们在实现这些算法的过程中,用到的图的存储结构(目前)只是涉及到两种 邻接链表存储结构和邻接矩阵存储结构。其中用到较多的还是邻接链表的形式。
在我们进行图的各种操作之前,我们必须先要创建一个图。因为后期我们小组要对每个人实现的算法进行比较,我们决定使用统一的图(具有相同的结点个数和相同的边),因此引出了我遇到的第一个问题:如何将txt文件里面的数据读取出来。
首先我们先来分析txt文档里面存储的数据结构:
6506 0 1 0 34 0 678 ...
txt文档的第一行数字为图中结点的个数,此后每一行体表一条边,第一个int数字为边的起点,后一个数字为边的终点。我们可以发现,数据的存储结构相对于之前写IL算法时的数据集结构要简单的多,所以相应的操作也就少了,拿uniprot150m.txt数据集来说整个文件有293MB的大小,我们使用getline()方法就可以完成,时间消耗个人感觉比较多,读入文件且创建图的部分代码如下:
void Graph::creat_Linklist_Direction(){ ifstream read("E:/uniprot150m.txt"); string tem; getline(read,tem); istringstream iss(tem);//利用istream 读取string类型并转为int iss >> vex_num; cout<<"结点的个数:"<<vex_num<<endl; createVertexArry(); int start,end; int weight=0; while(!read.eof()){ getline(read,tem); if (tem=="#") { continue; } if (tem!="") {//对读入每行的内容进行分割 int pos=tem.find(" ",0); istringstream st(tem.substr(0,pos)); st>>start; //cout<<start<<endl; istringstream stt(tem.substr(pos,tem.length())); stt>>end; //cout<<end<<endl; addedge_direction(start,end,weight);//调用外部函数完成添边的操作 } } read.close(); cout<<"有向图链表存储完成!"<<endl; }
以上代码就可以完成我们读取txt文件并且创建一个图的过程,当然这种读取的方法是要慢一点,还有一种是利用fscanf()函数来完成的,时间相对直接使用getline()方法有部分提高,后来又发现另一种方法,还是直接上代码来理解,如下:
ifstream re; int tem; re.open("E:\\Share\\Sort_data\\1.txt"); if (re.bad()) { cout<<"can not open the file!"<<endl; } while(!re.eof()){ re>>tem;//取出的直接就是int类型的;//也可以用 re>>tem1>>tem2,可以将一行的两个元素读取 cout<<tem<<endl;//真正用的时候我们直接换成创建数组的过程; } re.close();
目前为止一直使用这种方法读取,简单易操作,而且速度也不慢,暂时没有发现更好的读取方法,现将代码链接粘上点击下载
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解