c++ lIst的对象如何保存在文件中?

c++ lIst的对象如何保存在文件中?,第1张

这个问题得研究一下list的源码,

list本身和list的节点是不同的结构,首先看list的节点结构:

template<class

T>

struct

__list_node{

typedef

void*

void_pointer

void_pointer

prev

void_pointer

next

T

data

}

从这里可以看出,list中用于存储不同类型的值,如int

或者

float

会影响list的节点的大小。

而list本身的结构如下:

template<class

T>

class

list{

protected:

typedef

__list

node<T>

list_node

public:

typdefef

__list

node*

link_type

protected:

link_type

node//只要一个指针,便可表示整个list

...

}

从这里可以看出,

list中仅仅是保存了一个指向其节点的指针,

所以当对list使用仿陵sizeof的时候,

只会计算差大盯这个指针的占用的空间大小,

和整个list所指向的链表有多少个节点无关。

也就是说sizeof(list<double>)始终都是同一个值。

如果想知道list中存放了多少个值,可以调用list.size()

至于把list中的内容写到文件上,可以循环的读取list中的内容,然后再写至相应的文件

下面是我写的一段代码(VS2005编译器),楼主可以参考一下:

#include<iostream>虚和

#include<fstream>

#include<iostream>

#include<list>

using

namespace

std

int

main()

{

fstream

file("test.txt",fstream::out)

list<int>

int_list

cout<<sizeof(int_list)<<endl//cout<<24

cout<<int_list.size()<<endl//cout<<0

for(int

i=0i<100i++)

int_list.push_back(i)

cout<<sizeof(int_list)<<endl//cout<<24

cout<<int_list.size()<<endl//cout<<100

for(list<int>::const_iterator

it=int_list.begin()it!=int_list.end()it++)

file<<*it<<endl//cin

to

file

file.clear()

file.close()

}

可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储list对象,举例:

OutputStreamWriter pw = null//定义一个流

pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK")//确认流的输出文件和编码格式,此过友脊程创建了“test.txt”实例

pw.write(list)//将要写入文件的内容,可以多次write

pw.close()//关闭流

备注:文件流用完之后必须及时通过close方法好誉渗关闭,否则会一直处于打开状虚携态,直至程序停止,增加系统负担。

循环list

try:

f = file("b.txt"源罩源雹态, "闷悔a+")

f.write(a)

finally:

f.close()

file_object.close( )


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12152093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存