c++ lIst的对象如何保存在文件中?
发布网友
发布时间:2022-06-20 14:39
我来回答
共1个回答
热心网友
时间:2022-06-20 15:04
这个问题得研究一下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=0;i<100;i++)
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();
}