• 0829|C++day7 auto、lambda、C++数据类型转换、C++标准模板库(STL)、list、文件操作


    一、思维导图

     

     

    二、【试编程】将实例化类对象写入容器后,写入.txt文本中,再重新定义一个类容器,将.txt中的内容读取出来,输出到终端

    封装一个学生的类,定义一个学生这样类的vector容器, 里面存放学生对象(至少3个)

    再把该容器中的对象,保存到文件中。

    再把这些学生从文件中读取出来,放入另一个容器中并且遍历输出该容器里的学生。

    方法一(使用string类型的容器读取)

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. class Stu
    6. {
    7. private:
    8. string name;
    9. int id;
    10. public:
    11. //无参构造函数
    12. Stu() {}
    13. //有参构造函数
    14. Stu(string n, int i):name(n),id(i){}
    15. string getname()
    16. {
    17. return name;
    18. }
    19. int getid()
    20. {
    21. return id;
    22. }
    23. };
    24. int main()
    25. {
    26. Stu s1("张三",1001);
    27. Stu s2("李四",1002);
    28. Stu s3("王五",1003);
    29. Stu s4("赵六",1004);
    30. Stu s5("小明",1005);
    31. vector v;//无参构造函数
    32. v.push_back(s1);//尾插
    33. v.push_back(s2);
    34. v.push_back(s3);
    35. v.push_back(s4);
    36. v.push_back(s5);
    37. //创建一个流对象
    38. ofstream osf;
    39. //以写的方式打开文件
    40. osf.open("D:/hqyj/QTtxt/day7/stu.txt",ios::out);
    41. //写入数据
    42. for(int i=0;i<5;i++)
    43. {
    44. osf << v.at(i).getname() << " " << v.at(i).getid() << endl;
    45. }
    46. //关闭文件
    47. osf.close();
    48. //创建一个流对象
    49. ifstream isf;
    50. //以读的方式打开文件
    51. isf.open("D:/hqyj/QTtxt/day7/stu.txt",ios::in);
    52. //读取数据
    53. //创建一个新的容器存放读取到的数据
    54. vector stu;
    55. string buf;//将从文件中的数据暂存到buf中
    56. while(getline(isf,buf))//当读不到数据时退出循环
    57. {
    58. isf >> buf;//从文件中读取
    59. stu.push_back(buf);//写入到容器中
    60. }
    61. for(int i=0;isize();i++)
    62. {
    63. cout << stu.at(i);
    64. cout << endl;
    65. }
    66. //关闭文件
    67. isf.close();
    68. return 0;
    69. }

    方法二(使用类容器读取)

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. class Stu
    6. {
    7. private:
    8. string name;
    9. int id;
    10. public:
    11. //无参构造函数
    12. Stu() {}
    13. //有参构造函数
    14. Stu(string n, int i):name(n),id(i){}
    15. string getname()
    16. {
    17. return name;
    18. }
    19. int getid()
    20. {
    21. return id;
    22. }
    23. };
    24. int main()
    25. {
    26. Stu s1("张三",1001);
    27. Stu s2("李四",1002);
    28. Stu s3("王五",1003);
    29. Stu s4("赵六",1004);
    30. Stu s5("小明",1005);
    31. vector v;//无参构造函数
    32. v.push_back(s1);//尾插
    33. v.push_back(s2);
    34. v.push_back(s3);
    35. v.push_back(s4);
    36. v.push_back(s5);
    37. //创建一个流对象
    38. ofstream osf;
    39. //以写的方式打开文件
    40. osf.open("D:/hqyj/QTtxt/day7/stu.txt",ios::out);
    41. //写入数据
    42. for(int i=0;i<5;i++)
    43. {
    44. osf << v.at(i).getname() << " " << v.at(i).getid() << endl;
    45. }
    46. //关闭文件
    47. osf.close();
    48. //创建一个流对象
    49. ifstream isf;
    50. //以读的方式打开文件
    51. isf.open("D:/hqyj/QTtxt/day7/stu.txt",ios::in);
    52. //读取数据
    53. //创建一个新的容器存放读取到的数据
    54. vector stu;
    55. string buf;//将从文件中的数据暂存到buf中
    56. while(getline(isf,buf))//使用getline函数从文件流isf中逐行读取数据,并将每一行的内容存储在字符串变量buf中
    57. {
    58. string name = buf.substr(0,buf.length()-4);//使用substr函数从读取到的每一行中提取出姓名部分。line.length() - 4表示从当前行的开头截取到倒数第4个字符之前,剩下的部分即为姓名。
    59. int id = atoi(buf.substr(buf.length()-4).c_str());//使用substr函数和atoi函数从读取到的每一行中提取出学号部分。line.length() - 4表示从当前行的末尾4个字符开始截取,剩下的部分即为学号。atoi函数将提取到的学号转换为整数。
    60. Stu s(name,id);//使用从文件中提取得到的姓名和学号实例化一个Stu对象
    61. stu.push_back(s);//尾插,将创建的学生对象添加到容器v的末尾
    62. }
    63. for(int i=0;isize();i++)
    64. {
    65. cout << stu[i].getname() << stu[i].getid() << endl;
    66. }
    67. //关闭文件
    68. isf.close();
    69. return 0;
    70. }

  • 相关阅读:
    面向对象-01我的世界
    【广州华锐互动】智轨列车AR互动教学系统
    C语言 函数
    炫酷的登录框!(附源码)
    【C语言刷LeetCode】378. 有序矩阵中第 K 小的元素(M)
    艾美捷热转移稳定性检测试剂盒解决方案
    “维护者都快累死了!”Linux 宣布:LTS 版本的维护期,将从 6 年变回 2 年
    ElasticSearch - DSL查询文档语法,以及深度分页问题、解决方案
    BreederDAO 第一项提案发布:DAO 组织的宪法章程
    二、准备开发与调试环境
  • 原文地址:https://blog.csdn.net/Smallxu_/article/details/132564999