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

news2024/11/19 3:42:34

作业:

封装一个学生的类,定义一个学生这样类的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的值,必须在()后加上mutable
    auto 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,地址相同,可以直接修改,不用加上mutable
    auto fun5=[&,a,b](){};//捕获外界所有变量的地址,但变量a,b捕获的是值,修改需要加mutable
    return 0;
}

4.容器

#include <iostream>
#include<vector>
using namespace std;

void printVector(vector<int> &v)
{
   vector <int>::iterator ite;//创建一个vector<int>类型的迭代器ite
   for(ite=v.begin();ite!=v.end();ite++)
   {
       cout << *ite << ' ';
   }
   cout << endl;
}
int main()
{
    //容器
    vector<int>v;//无参构造容器v
    v.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拷贝给v3
    printVector(v3);
    vector<int>v4=v2;//拷贝构造,将v2中的值拷贝给v4
    printVector(v4);
    vector<int>v5(v3);//拷贝构造,将v3中的值拷贝给v5
    printVector(v5);
    vector<int>v6;
    v6=v5;//拷贝赋值,将v5的值拷贝一份给v6
    v6.assign(v5.begin(),v5.end());//将v5begin到end区间的值拷贝一份赋值给v6
    v6.assign(8,99);//将8个99拷贝一份赋值给v6
    if(v6.empty())//判断v6是否为空
    {
        cout << "v6容器为空" << endl;
    }
    else
    {
        cout << "v6容器的容量为:" << v6.capacity() << endl;
        cout << "v6容器的大小(容器中的元素个数)为:" << v6.size() <<endl;
        printVector(v6);
        v6.resize(15);//大小重新设置为15,数据不够补充0
        printVector(v6);

    }
    return 0;
}

5.list链表

#include <iostream>
#include <list>
using namespace std;

void printList(list<char> &v)
{
   list <char>::iterator ite;//创建一个list<char>类型的迭代器ite
   for(ite=v.begin();ite!=v.end();ite++)
   {
       cout << *ite << ' ';
   }
   cout << endl;
}
int main()
{
    list <char> lst;//定义一个链表,里面存放char类型元素
    lst.push_back('h');//存放一个字符a
    lst.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个h
    lst5.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.coloradmin.cn/o/946055.html

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

相关文章

每天刷题五道RHCSA/1-5道(RedHat8.2)

1.第一题配置网络 nmcli con show #查看⽹卡信息 ​ nmcli con mod Wired connection 1 ipv4.method manual ipv4.addresses 172.25.250.100/24 ipv4.gateway 172.25.250.254 ipv4.dns 172.25.250.254 #配置ip信息&#xff0c;中间⽤空格隔开 ​ nmcli con up Wired connection…

大型综合集团数字化转型解决方案PPT

导读&#xff1a;原文《大型综合集团数字化转型解决方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 部分内容&#xff1a; 喜欢文章&#xff0c;您可以关注…

SAP_ABAP_OO_ALV案例

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型https://blog.csdn.net/java_zhong1990/article/details/132469977 一、OO_ ALV ,面向对象开发ALV报表 基于对收款清账平台的开发&#xff0c;解释 OO_ALV开发的程序结构与代码模板参考 1.1 代…

FrameBuffer 应用编程

目录 什么是FrameBufferLCD 的基础知识使用ioctl()获取屏幕参数信息使用mmap()将显示缓冲区映射到用户空间 LCD 应用编程练习之LCD 基本操作LCD 应用编程练习之显示BMP 图片BMP 图像介绍在LCD 上显示BMP 图像在开发板上测试 在LCD 上显示jpeg 图像在LCD 上显示png 图片LCD 横屏…

Ansible项目实战管理/了解项目环境/项目管理

一&#xff0c;项目环境 1.项目基础 项目过程 调研阶段 设计阶段 开发阶段 测试阶段 运营阶段 2.项目环境 个人开发环境 公司开发环境 项目测试环境 项目预发布环境 灰度环境&#xff1a;本身是生产环境&#xff0c;安装项目规划&#xff0c;最终所有的生产环境都发…

nginx-concat

为了减少tcp请求数量&#xff0c;nginx从上有服务器获取多个静态资源&#xff08;css&#xff0c;js&#xff09;的时候&#xff0c;将多个静态资源合并成一个返回给客户端。 这种前面有两个问号的请求都是用了cancat合并功能。 先到官网下载安装包&#xff0c;拷贝到服务器编译…

华为MateBook14 2020款 锐龙版R5集显触屏(KLVL-WFH9)原装Win10系统工厂模式安装包

系统自带F10智能还原功能、带指纹、显卡、声卡、网卡等所有驱动、出厂主题壁纸、系统属性华为专属LOGO标志、Office办公软件、华为电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;rar压缩包 文件大小&#xff1a;11GB 链接&#xff1a;htt…

Web服务器-Tomcat详细原理与实现

Tomcat 安装与使用 &#xff1a;MAC 安装配置使用Tomcat - 掘金 安装后本计算机就相当于一台服务器了&#xff01;&#xff01;&#xff01; 方式一&#xff1a;使用本地安装的Tomcat 1、将项目文件移动到Tomcat的webapps目录下。 2、启动Tomcat 3、在浏览器输入想要加载的…

软考:中级软件设计师:邮件加密系统,网络安全保障,网络威胁与攻击,防火墙技术

软考&#xff1a;中级软件设计师:邮件加密系统 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &…

Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)

一 Web开发模式 1. 前后端混合开发模式 前后端混合开发模式是一种开发方式&#xff0c;将前端和后端的开发工作结合在一起&#xff0c;以加快项目的开发速度和 提高协作效率。这种模式通常用于快速原型开发、小型项目或敏捷开发中。在前后端混合开发模式中&#xff0c;前端和…

得物推荐引擎 - DGraph

1 前言 随着得物业务规模的不断增加&#xff0c;推荐业务也越来越复杂&#xff0c;对推荐系统也提出了更高的要求。我们于2022年下半年启动了DGraph的研发&#xff0c;DGraph是一个C项目&#xff0c;目标是打造一个高效易用的推荐引擎。推荐场景的特点是表多、数据更新频繁、单…

CSS 滚动容器与固定 Tabbar 自适应的几种方式

问题 容器高度使用 px 定高时&#xff0c;随着页面高度发生变化&#xff0c;组件展示的数量不能最大化的铺满&#xff0c;导致出现底部留白。容器高度使用 vw 定高时&#xff0c;随着页面宽度发生变化&#xff0c;组件展示的数量不能最大化的铺满&#xff0c;导致出现底部留白…

基于PID优化和矢量控制装置的四旋翼无人机(MatlabSimulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C语言每日一练------(Day3)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今天练习题的关键字&#xff1a; 尼科彻斯定理 等差数列 &#x1f493;博主csdn个人主页&#xff1a…

麒麟信安受邀参展第八届成都智博会,自主创新系列成果备受关注!

图片来源&#xff1a;人民网 日前&#xff0c;由四川省贸促会和四川省科学技术协会主办&#xff0c;中国国际商会与四川省互联网信息办公室、四川省密码管理局等18个省市相关部门支持的第八届中国&#xff08;成都&#xff09;智慧产业国际博览会&#xff08;以下简称“第八届成…

深度|沃尔玛眼中只有盒马,但盒马Fudi眼中却没有山姆

外资会员制超市是懂中国消费者的&#xff0c;尤其是懂4亿中国中产。 前有Costco&#xff08;开市客&#xff09;中国大陆首店上海开业当天&#xff0c;曾投放5吨10000瓶飞天茅台&#xff0c;还有Burberry、爱马仕等奢侈品直接被消费者瞬间秒空&#xff0c;最后由于慕名而来的人…

如何实现个人微信的自动回复?

自动回复这块&#xff0c;我知道的实现方法和形式有以下几种&#xff1a; 1.自动通过好友&#xff1a;针对有新的好友申请的时候&#xff0c;会自动通过好友&#xff0c;以免错过客户。 2.通过好友自动回复&#xff1a;针对被动通过好友后&#xff0c;自动给通过的微信好友发送…

ospf不规则区域划分和数据库表

华子目录 ospf不规则区域1.远离骨干的非骨干区域2.不连续骨干 不规则区域解决方案1.tunnel-点到点GRE2.ospf虚链路3.多进程双向重发布&#xff08;推荐&#xff09; ospf的数据库表 ospf不规则区域 1.远离骨干的非骨干区域 图示 2.不连续骨干 图示 不规则区域解决方案 …

Geodetector 应用excel显示宏损坏的解决办法

打开地理探测器 如果显示宏损坏&#xff0c;每次excel会自动删除文件中的宏文件&#xff0c;导致地理探测器不能运行&#xff0c;这样的解决办法主要是&#xff1a;修改电脑本身格式与excel宏文件运行格式一致&#xff1a; 区域格式改为中文&#xff0c;这样就可以运行了。

如何选择科研可视化的图表?(超全!总结10多个可视化代码资源)

Highlights 一张漂亮的配图能让论文增色不少&#xff0c;但现在的图表类型越来越丰富&#xff0c;学者们很难选择合适的绘图类型进行可视化。 随着大数据和云计算的发展&#xff0c;我们很容易就能获取大量的数据&#xff0c;但是将这些数据美观地展示出来不是一件容易的事情。…