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方法好誉渗关闭,否则会一直处于打开状虚携态,直至程序停止,增加系统负担。
循环listtry:
f = file("b.txt"源罩源雹态, "闷悔a+")
f.write(a)
finally:
f.close()
file_object.close( )
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)