查看单个帖子
  #3 (permalink)  
旧 2008-07-22
liuxinyu 的头像
liuxinyu liuxinyu 当前离线
高级会员
 
注册日期: 2006-02-09
帖子: 311
文章: 49
liuxinyu 正向着好的方向发展
默认 回复: 二进制保存链表的问题

我想可能本意是“持久化”问题中的,深拷贝持久化。
能做到深拷贝就达到目的了。

c++ 代码:
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. struct item{
  6.   item(const char* x, item* n=0):data(x),next(n){ }
  7.   item(const item& i):data(i.data),next(i.next){ }
  8.  
  9.   ~item(){ delete next; }
  10.  
  11.   std::string data;
  12.   item* next;
  13. };
  14.  
  15. void print_list(item* li){
  16.   if(li){
  17.     std::cout<<li->data<<"==>";
  18.     print_list(li->next);
  19.   }
  20.   else
  21.     std::cout<<"null\n";
  22. }
  23.  
  24. void save_list(item* li){
  25.   std::ofstream f("foo.dat");
  26.   while(li){
  27.     f<<li->data<<",";
  28.     li=li->next;
  29.   }
  30. }
  31.  
  32. item* load_item(std::ifstream& f){
  33.   item* x=0;
  34.   char c;
  35.   while(f.get(c) && c!=','){
  36.     if(!x)
  37.       x=new item("");
  38.     x->data+=c;
  39.   }
  40.   if(c==',')
  41.     x->next=load_item(f);
  42.   return x;
  43. }
  44.  
  45. item* load_list(){
  46.   std::ifstream f("foo.dat");
  47.   return load_item(f);
  48. }
  49.  
  50. int main(int, char**){
  51.   item* li=new item("hello", new item("world", new item("?", new item("foo"))));
  52.   print_list(li);
  53.   save_list(li);
  54.   delete li;
  55.   li=load_list();
  56.   print_list(li);
  57.   delete li;
  58. }

程序运行:
liuuuxin@WEIFANG ~/temp
$ g++ test.cpp -o test

liuuuxin@WEIFANG ~/temp
$ ./test
hello==>world==>?==>foo==>null
hello==>world==>?==>foo==>null
__________________
==================================
http://liuxinyu95.googlepages.com
liuxinyu95@gmail.com
==================================
回复时引用此帖