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
上传中...
上传图片
插入图片