鱼C论坛

 找回密码
 立即注册
查看: 2072|回复: 4

栈中的数据可以以文件的形式存储下来吗

[复制链接]
发表于 2022-5-2 06:14:33 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想请问一下各位大佬栈中的数据可以以文件的形式存储下来吗,保存下来并且可以重新加载,如果可以的话麻烦大佬给一个实现思路万分感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-5-2 07:58:48 From FishC Mobile | 显示全部楼层
这样说,感觉狠模糊,你需要举个例子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-2 14:43:22 From FishC Mobile | 显示全部楼层
wp231957 发表于 2022-5-2 07:58
这样说,感觉狠模糊,你需要举个例子

比如说我要写一个画板,要实现撤销功能,还要实现把绘图的过程,保存下来并且能重新加载在文件中,加载后还可以撤销或者继续绘画的步骤,我想用栈来实现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-2 16:10:09 | 显示全部楼层
  1. #include <iostream>
  2. #include <stack>
  3. #include <fstream>
  4. #include <string>

  5. using std::stack;
  6. using std::string;
  7. using std::ifstream, std::ofstream;
  8. using std::ios_base;
  9. using std::cout, std::endl;

  10. template<typename T>
  11. void save(const string &filename, stack<T> s) {
  12.     stack<T> temp;
  13.     while(!s.empty()) {
  14.         temp.push(s.top());
  15.         s.pop();
  16.     }
  17.     ofstream os(filename, ios_base::out | ios_base::binary);
  18.     size_t size = temp.size();
  19.     os.write((const char *)&size, sizeof(size));
  20.     while(!temp.empty()) {
  21.         os.write((const char *)&temp.top(), sizeof(temp.top()));
  22.         temp.pop();
  23.     }
  24. }

  25. template<typename T>
  26. void load(const string &filename, stack<T> &s) {
  27.     ifstream is(filename, ios_base::in | ios_base::binary);
  28.     if(!is) return;
  29.     //s.clear();
  30.     s = stack<T>();
  31.     size_t size;
  32.     is.read((char *)&size, sizeof(size));
  33.     for(size_t i = 0; i < size; ++i) {
  34.         T value;
  35.         is.read((char *)&value, sizeof(value));
  36.         s.push(value);
  37.     }
  38. }

  39. int main() {
  40.     {
  41.         stack<size_t> sa;
  42.         for(size_t i = 3; i < 8; ++i) {
  43.             sa.push(i);
  44.         }
  45.         save("stack.dat", sa);
  46.         stack<size_t> sb;
  47.         load("stack.dat", sb);
  48.         cout << (sa == sb ? "true" : "false") << endl;
  49.         sa.push(1234);
  50.         cout << (sa == sb ? "true" : "false") << endl;
  51.     }
  52.     {
  53.         stack<double> sa;
  54.         for(size_t i = 3; i < 8; ++i) {
  55.             sa.push(i + 3.14);
  56.         }
  57.         save("stack.dat", sa);
  58.         stack<double> sb;
  59.         load("stack.dat", sb);
  60.         cout << (sa == sb ? "true" : "false") << endl;
  61.         sa.push(1234.4321);
  62.         cout << (sa == sb ? "true" : "false") << endl;
  63.     }
  64.     return 0;
  65. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-2 21:12:29 From FishC Mobile | 显示全部楼层
人造人 发表于 2022-5-2 16:10

非常感谢大佬,就是我用的是c#,需要一定的时间研究一下c++,万分感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 10:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表