2 guihesu guihesu 于 2015.07.15 12:11 提问

将一个链表输入文件里面

我想在一个类中的析构函数里把一个链表输入文件 在构造函数从文件输出这个链表 请问各位该怎么写?

4个回答

oyljerry
oyljerry   Ds   Rxr 2015.07.15 12:39

主要就是序列化工作,可以用boost的序列化库(http://www.boost.org/doc/libs/release/libs/serialization/doc/index.html)

 #include <algorithm>
#include <fstream>
#include <vector>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/vector.hpp>

using namespace std;

struct Vertex
{
    float x, y, z;
};

bool operator==(const Vertex& lhs, const Vertex& rhs)
{
    return lhs.x==rhs.x && lhs.y==rhs.y && lhs.z==rhs.z;
}

namespace boost { namespace serialization {
    template<class Archive>
    void serialize(Archive & ar, Vertex& v, const unsigned int version)
    {
        ar & v.x; ar & v.y; ar & v.z;
    }
} }

typedef vector<Vertex> VertexList;

int main()
{
    // Create a list for testing
    const Vertex v[] = {
        {1.0f, 2.0f,   3.0f},
        {2.0f, 100.0f, 3.0f},
        {3.0f, 200.0f, 3.0f},
        {4.0f, 300.0f, 3.0f}
    };
    VertexList list(v, v + (sizeof(v) / sizeof(v[0])));

    // Write out a list to a disk file
    {
        ofstream os("data.dat", ios::binary);
        boost::archive::binary_oarchive oar(os);
        oar << list;
    }

    // Read it back in
    VertexList list2;

    {
        ifstream is("data.dat", ios::binary);
        boost::archive::binary_iarchive iar(is);
        iar >> list2;
    }

    // Check if vertex lists are equal
    assert(list == list2);

    return 0;
}
caozhy
caozhy   Ds   Rxr 2015.07.15 12:22
Evankaka
Evankaka   Ds   Rxr 2015.07.15 12:35

在构造函数从文件输出这个链表,读文件,事先我知道文件的分隔符号,是怎么来分的。然后设置一个全局的List对象,依次把读到的数据放入到List中。
这中间可能会涉及到数据类型的转换。然后析构函数里List输入到文件,这个过程就是反过来的。

CSDNXIAON
CSDNXIAON   2015.07.16 15:30

将文件读取到链表里面
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++ 将数据写入链表,将链表写入文件,再将文件中的内容读出
就算世界荒芜,总有一个人,他会是你的信徒。          ----《独木舟里的星星》 第一步:创建一个节点 templatetypename T> class Node { public:     Node(T data)     {         m_data = data;         m_pNext = NULL;     }     c
将文件中的内容写入链表
   在学校里,学过一点C,不过水平很低,现在学起来感觉很吃力,不过每天学会一点,还是挺开心的。编程这东西,写写,想想也就会了。   以下所有代码,均在Linux环境下,VIM编辑器中编写,通过GCC调试。   将文件中的内容写入链表的思路:  (1) 我们先要建立一个文件,示例中我采用了 stu_data.txt,创建一个文件指针FILE *fp指向该文件  (2)我们知道要将文件内容写入链表,其实非常类似与我们平时,将标准的输入输出写入链表。所以只要在文件的操作内,完成链表的建          立就好
输入任意个数字存入单链表中
#include #include typedef struct LNode  //定义单链表节点 {  int data;  struct LNode * next; }LNode,*Linklist; /*--------------------------
基于结构体数组的链表实现
<br /> <br />/*基于结构体数组的链表实现*/ /* made by winlin 2011.4.11*initialize(  )初始化存储池 *insertNode(  )插入一个节点 *deleteNode(  )删除一个节点 *display_member(  )显示存储池里面的数据 *display_info(  )显示存储池当前的信息 *isempty(  )存储池是否已满  */ #include <iostream> #include <cstdlib>  typedef int
PTA 4-1 建立学生信息链表 (50分)
建立学生信息链表本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。函数接口定义:void input();该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表。
6-2 学生成绩链表处理(10 分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: struct stud_node *
struct stud_node *createlist() {     struct stud_node *head, *tail, *q;     head = tail = NULL;     int num;     scanf ("%d", &num);     while (num != 0)     {         q = (struct stud_node *)
6-4 建立学生信息链表(20 分)——尾插建链表_题程序访问是越界——真是醉了,你自己跑下是会抛出异常的
**6-4 建立学生信息链表(20 分) 本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。函数接口定义:void input(); 该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表。链表节点结构定义如下:struct stud_node { int num; /*学号*/ char name[20]
C语言入门:奇数值节点链表
奇数值节点链表:输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的节点重新组成一个新的链表NEW,并输出新建链表的信息。试编写相应程序。 #include #include struct a { //结构a的定义 int n; struct a *next; } A; struct a *creat() //建立链
用C++实现链表保存到文本文档
struct str链表以文件形式保存的时候是不是只能保存DATA部分的数据?也就是说从文件读取的时候*next部分的内容需要重新建立链表来确定。另外,如果一个结构体长度不固定(比如里面有char *string),保存为文件的时候该如何分配空间?又该如何读取?是不是不能用fwrite(),fread()了不胜感激!第一个问题,只能说是的。内存的地址保存了也没用。每次不一样。第二个问题,你的问
从txt文件中读取数据并自动建立单链表
从文本文件中读取数据并自动建立单链表 另一个完整的程序 http://download.csdn.net/source/3198575 VC++6.0环境下编译通过