c++(8.29)auto关键字,lambda表达式,数据类型转换,标准模板库,list,文件操作+Xmind

作业:

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

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

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

#include <iostream>
#include<vector>
#include<fstream>
using namespace std;class Stu
{friend istream & operator>>(istream &cin,Stu &R);friend ostream & operator<<(ostream &cout,const Stu &R);
private:string name;int age;
public:Stu(){};Stu(string name,int age):name(name),age(age){};
};ostream & operator<<(ostream &cout,const Stu &R)
{cout << R.name << " ";cout << R.age << endl;return cout;
}istream & operator>>(istream &cin,Stu &R)
{cin >> R.name;cin >> R.age;return cin;
}
int main()
{Stu s1("张三",18);Stu s2("李四",20);Stu s3("王五",19);vector<Stu> stu;stu.push_back(s1);stu.push_back(s2);stu.push_back(s3);ofstream ofs;ofs.open("D:/2.txt",ios::out);vector<Stu>::iterator iter;for(iter = stu.begin();iter!=stu.end();iter++){ofs << *iter ;}ofs.close();vector<Stu>stu1;Stu s;ifstream ifs;ifs.open("D:/2.txt",ios::in);while(ifs>>s){stu1.push_back(s);}for(iter=stu1.begin();iter!=stu1.end();iter++){cout << *iter ;}ifs.close();return 0;
}

 1.模板类

#include <iostream>using namespace std;template < class T,class N>
class A
{
private:T t;N n;
public:A(){};//无参构造A(T t,N n):t(t),n(n){}//有参构造void show(){cout << t << endl << n << endl;}
};
int main()
{A<string,int> a("张三",18);a.show();return 0;
}

2.异常(异常情况为取钱时取的钱小于0或者大于余额)

#include <iostream>using namespace std;class BankAccount
{
private:double balance;
public:BankAccount(){};BankAccount(double balance):balance(balance){};void withdraw(double money){if(money<0){throw(invalid_argument("取款金额不能为负数"));}else if(money>balance){throw(runtime_error("余额不足"));}else{balance -= money;cout << "余额为:" << balance << endl;}}
};int main()
{BankAccount account1(1000);try {account1.withdraw(-100);} catch (invalid_argument &e){cout << "Erro:" << e.what() << endl;} catch (runtime_error &e){cout << "Erro:" << e.what() << endl;}try {account1.withdraw(1500);} catch (invalid_argument &e){cout << "Erro:" << e.what() << endl;} catch (runtime_error &e){cout << "Erro:" << e.what() << endl;}try {account1.withdraw(500);} catch (invalid_argument &e){cout << "Erro:" << e.what() << endl;} catch (runtime_error &e){cout << "Erro:" << e.what() << endl;}return 0;
}

3.lambda表达式和auto的使用

#include <iostream>using namespace std;int main()
{int a=100;double b=3.14;char c='a';auto fun=[a,b,c](){};//捕获外界a,b,c变量的值,fun函数中的a,b,c不是外界的a,b,c,地址不同,//想要修改fun中的a,b,c的值,必须在()后加上mutableauto fun1=[=](){};//捕获外界所有的变量值auto fun2=[&a,&b](){};//捕获外界a,b变量的地址,fun函数中的a,b是外界的a,b,地址相同,//想要修改fun2中的值,可以直接改变auto fun3=[&](){};//捕获外界所有的变量的地址auto fun4=[=,&a,&b](){};//捕获外界所有的值,但是变量a和变量b是引用捕获,//fun函数中的a,b是外界的a,b,地址相同,可以直接修改,不用加上mutableauto fun5=[&,a,b](){};//捕获外界所有变量的地址,但变量a,b捕获的是值,修改需要加mutablereturn 0;
}

4.容器

#include <iostream>
#include<vector>
using namespace std;void printVector(vector<int> &v)
{vector <int>::iterator ite;//创建一个vector<int>类型的迭代器itefor(ite=v.begin();ite!=v.end();ite++){cout << *ite << ' ';}cout << endl;
}
int main()
{//容器vector<int>v;//无参构造容器vv.push_back(10);//尾插v.push_back(20);v.push_back(30);v.push_back(40);//算法printVector(v);vector<int>v2(v.begin(),v.end());//拷贝v中begin到end区间中的值printVector(v2);vector<int>v3(6,10);//拷贝构造,将6个10拷贝给v3printVector(v3);vector<int>v4=v2;//拷贝构造,将v2中的值拷贝给v4printVector(v4);vector<int>v5(v3);//拷贝构造,将v3中的值拷贝给v5printVector(v5);vector<int>v6;v6=v5;//拷贝赋值,将v5的值拷贝一份给v6v6.assign(v5.begin(),v5.end());//将v5begin到end区间的值拷贝一份赋值给v6v6.assign(8,99);//将8个99拷贝一份赋值给v6if(v6.empty())//判断v6是否为空{cout << "v6容器为空" << endl;}else{cout << "v6容器的容量为:" << v6.capacity() << endl;cout << "v6容器的大小(容器中的元素个数)为:" << v6.size() <<endl;printVector(v6);v6.resize(15);//大小重新设置为15,数据不够补充0printVector(v6);}return 0;
}

5.list链表

#include <iostream>
#include <list>
using namespace std;void printList(list<char> &v)
{list <char>::iterator ite;//创建一个list<char>类型的迭代器itefor(ite=v.begin();ite!=v.end();ite++){cout << *ite << ' ';}cout << endl;
}
int main()
{list <char> lst;//定义一个链表,里面存放char类型元素lst.push_back('h');//存放一个字符alst.push_back('e');lst.push_back('l');lst.push_back('l');lst.push_back('o');printList(lst);//输出lst中的所有元素lst.push_front('a');//在lsit表头部插入字符'a'lst.push_back('!');//在尾部插入元素'!'printList(lst);//输出lst中的所有元素lst.pop_front();//删除list表头部元素lst.pop_back();//删除list表尾部元素printList(lst);//输出lst中的所有元素list <char> lst2(lst.begin(),lst.end());//拷贝构造函数,将lst内从begin到end的元素拷贝到链表lst2中printList(lst2);//输出lst2中的所有元素list <char> lst3(3,'6');//拷贝构造函数,将3个字符6存入链表lst3中printList(lst3);//输出lst3中的所有元素list <char> lst4(lst3);//拷贝构造函数,将lst3中的元素拷贝到lst4中printList(lst4);//输出lst4中的所有元素list <char> lst5;lst5.assign(lst.begin(),lst.end());//拷贝赋值函数,将lst中begin到end区间的值拷贝一份赋值到lst5中printList(lst5);//输出lst5中的所有元素,结果和lst结果一致lst5.assign(7,'h');//将5个h赋值到lst5中printList(lst5);//输出lst5中的所有元素,结构为7个hlst5.swap(lst);//将lst中的元素和本身中的元素交换printList(lst5);//输出lst5中的所有元素,因为交换,变成了lst中的元素printList(lst);//输出lst中的所有元素,因为交换,变为之前lst5中的元素了cout << "------------------------------" << endl;list <char> lstt(5,'a');//创建一个lstt链表,里面含有5个'a'list <char> ::iterator ite;lstt.insert(lstt.begin(),'h');//在begin位置插入一个字符'h'printList(lstt);//输出lstt链表中的所有元素lstt.remove('a');//删除lstt链表中所有的字符'a'printList(lstt);//输出lstt链表中的所有元素lstt.clear();//删除lstt链表中的所有元素printList(lstt);//输出lstt链表中的所有元素return 0;
}

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/64247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS transition 过渡

1 前言 CSS过渡(transition)可以在一个元素切换到另一种状态时为其定义平滑的过渡效果。 例如&#xff0c;用户鼠标悬停在按钮上时&#xff0c;按钮颜色平滑的从一个颜色过渡到另一个颜色。 .btn:hover{background-color: red;color: black; }默认悬停效果 添加过渡效果 .b…

网工内推 | 上市公司,IT工程师、服务器工程师,IP以上优先

01 烟台睿创微纳技术股份有限公司 招聘岗位&#xff1a;IT工程师 职责描述&#xff1a; 1、负责网络及安全架构的规划、设计、性能优化&#xff1b; 2、负责网络设备的安装、配置、管理、排错、维护&#xff0c;提供网络设备维护方案&#xff1b; 3、负责防火墙、上网行为管理…

滑动窗口和双指针

滑动窗口和双指针 一、循环不变量1.1 定义1.2 总结 二、使用循环不变量写对代码2.1 注意2.2 总结 三、滑动窗口3.1 固定长度的滑动窗口&#xff08;同向交替移动的两个变量&#xff09;3.2 不定长度的滑动窗口3.2.1 定义3.2.2 总结 3.3 计数问题3.3.1 标准3.3.2 总结 3.4 使用数…

前端基础4——jQuery

文章目录 一、基本了解1.1 导入jQuery库1.2 基本语法1.3 选择器 二、操作HTML2.1 隐藏和显示元素2.2 获取与设置内容2.3 获取、设置和删除属性2.4 添加元素2.5 删除元素2.6 设置CSS样式 三、jQuery Ajax3.1 基本语法3.2 回调函数3.3 常用HTTP方法3.4 案例一3.4.1 准备工作3.4.2…

go语言配置

1、Go语言的环境变量 与Java等编程语言一样&#xff0c;安装Go语言开发环境需要设置全局的操作系统环境变量&#xff08;除非是用包管理工具直接安装&#xff09; 主要的系统级别的环境变量有两个: &#xff08;1&#xff09;GOROOT&#xff1a;表示Go语言环境在计算机上的安…

springboot docker

在Spring Boot中使用Docker可以帮助你将应用程序与其依赖的容器化&#xff0c;并简化部署和管理过程。 当你在Spring Boot中使用Docker时&#xff0c;你的代码不需要特殊的更改。你可以按照通常的方式编写Spring Boot应用程序。 java示例代码&#xff0c;展示了如何编写一个基…

lv3 嵌入式开发-3 linux shell命令(权限、输入输出)

1 Shell概述 随着各式Linux系统的图形化程度的不断提高&#xff0c;用户在桌面环境下&#xff0c;通过点击、拖拽等操作就可以完成大部分的工作。 然而&#xff0c;许多Ubuntu Linux功能使用shell命令来实现&#xff0c;要比使用图形界面交互&#xff0c;完成的更快、更直接。…

MOS场效应管

导体三极管中参与导电的有两种极性的载流子&#xff0c;所以也称为双极型三极管。本文将介绍另一种三极管&#xff0c;这种三极管只有一种载流子参与导电&#xff0c;所以也称为单极型三极管&#xff0c;因为这种管子是利用电场效应控制电流的&#xff0c;所以也叫场效应三极管…

JVM 垃圾收集器

重点&#xff1a;CMS&#xff0c;G1&#xff0c;ZGC 主要垃圾收集器如下&#xff0c;图中标出了它们的工作区域、垃圾收集算法&#xff0c;以及配合关系。 Serial 收集器 Serial 收集器是最基础、历史最悠久的收集器。 如同它的名字&#xff08;串行&#xff09;&#xff0c…

使用实体解析和图形神经网络进行欺诈检测

图形神经网络的表示形式&#xff08;作者使用必应图像创建器生成的图像&#xff09; 一、说明 对于金融、电子商务和其他相关行业来说&#xff0c;在线欺诈是一个日益严重的问题。为了应对这种威胁&#xff0c;组织使用基于机器学习和行为分析的欺诈检测机制。这些技术能够实时…

从0创建vite+vue3项目遇到的一些坑

使用ws自动创建的vitevue3项目后设置不了alias 答&#xff1a;不懂原理&#xff0c;但是有其他方法解决。直接在命令行执行“npm init vitelatest"后&#xff0c;一路选下去有create-vue的选项&#xff0c;就选这个create-vue创建&#xff1b;创建后会自动导入一个叫node…

滑动窗口最大值

题目链接 滑动窗口最大值 题目描述 注意点 只可以看到在滑动窗口内的 k 个数字返回 滑动窗口中的最大值1 < k < nums.length 解答思路 首先使用双端队列解决本题&#xff0c;队列中存储的是元素在数组中的下标&#xff0c;不断往队尾添加元素下标。在双端队列中&…

【图解算法数据结构】分治算法篇 + Java代码实现

文章目录 一、重建二叉树二、数值的整数次方三、打印从 1 到最大的 n 位数四、二叉搜索树的后序遍历序列五、数组中的逆序对 一、重建二叉树 public class Solution {int[] preorder;HashMap<Integer, Integer> dic new HashMap<>();public TreeNode buildTree(in…

算法:分治思想处理归并递归问题

文章目录 算法原理实现思路典型例题排序数组数组中的逆序对计算右侧小于当前元素的个数 总结 算法原理 利用归并思想进行分治也是很重要的一种思路&#xff0c;在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的&#xff0c;归并排序要能写出来&#xff1a; c…

Linux学习之vsftpd虚拟用户

/etc/vsftpd/vsftpd.conf里边有几项跟vsftpd虚拟用户有关的主要配置&#xff1a; guest_enableYES&#xff0c;允许匿名用户登录vsftpd guest_usernamevirtual&#xff0c;指定虚拟用户账户为virtual&#xff0c;就是把虚拟用户映射成Linux本地用户&#xff0c;这样可以使用Lin…

【C++】C++11新特性(下)

上篇文章&#xff08;C11的新特性&#xff08;上&#xff09;&#xff09;我们讲述了C11中的部分重要特性。本篇接着上篇文章进行讲解。本篇文章主要进行讲解&#xff1a;完美转发、新类的功能、可变参数模板、lambda 表达式、包装器。希望本篇文章会对你有所帮助。 文章目录 一…

用反射实现自定义Java对象转化为json工具类

传入一个object类型的对象获取该对象的class类getFields方法获取该类的所有属性对属性进行遍历&#xff0c;并且拼接成Json格式的字符串&#xff0c;注意&#xff1a;通过属性名来推断方法名获取Method实例通过invoke方法调用 public static String objectToJsonUtil(Object o…

MVC模式分层练习

新建库 新建表 插入点数据 先不用MVC模式写功能,来看下缺点是什么 新建一个空项目 选项项目使用的JDK 自己的IDEA总是要重启下 新建模块 因maven还没教 添加框架支持 添加后项目多了这些 添加些必要依赖 这里注意下,如果导入jar包不对可以重新导入下或者是jar包本身出了问…

C语言每日一练--------Day(8)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;图片整理 寻找数组下标 &#x1f493;博主csdn个人主页&#xff1a;小小…

安防监控/视频存储/视频汇聚平台EasyCVR接入海康Ehome车载设备出现收流超时的原因排查

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚平台既具…