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的值,必须在()后加上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;
}

​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小白视角:一文读懂3TS腾讯事务处理验证系统的基础知识

小白视角&#xff1a;一文读懂3TS腾讯事务处理验证系统的基础知识 一、解读结果图1.1 异常测试用例1.2 事务的隔离级别&#xff08;1&#xff09;SQL标准隔离级别&#xff08;2&#xff09;快照隔离&#xff08;Snapshot Isolation&#xff0c;简称 SI&#xff09;&#xff08;…

【单片机】有人WH-LTE-7S1 4G cat1 模块连接服务器,教程,记录

文章目录 4G cat1 模块封装引脚名称功能拓扑图串口模块调试WH-LTE-7S1 4G cat1 模块 我买的这个模块内置了电信卡&#xff0c;不用插电话卡就能用&#xff0c;要插也行&#xff0c;在背面。 ⚫ 5-16V 宽电压供电 ⚫ LTE Cat 1&#xff0c;搭载 4G 网络&#xff0c;低时延&…

SQL注入之报错注入

文章目录 报错注入是什么&#xff1f;报错注入获取cms账号密码成功登录 报错注入是什么&#xff1f; 在注入点的判断过程中&#xff0c;发现数据库中SQL 语句的报错信息&#xff0c;会显示在页面中&#xff0c;因此可以利用报错信息进行注入。 报错注入的原理&#xff0c;就是在…

虚拟化技术:云计算发展的核心驱动力

文章目录 虚拟化技术的概念和作用虚拟化技术的优势虚拟化技术对未来发展的影响结论 &#x1f389;欢迎来到AIGC人工智能专栏~虚拟化技术&#xff1a;云计算发展的核心驱动力 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系…

Particle Life粒子生命演化的MATLAB模拟

Particle Life粒子生命演化的MATLAB模拟 0 前言1 基本原理1.1 力影响-吸引排斥行为1.2 距离rmax影响 2 多种粒子相互作用2.1 双种粒子作用2.1 多种粒子作用 3 代码 惯例声明&#xff1a;本人没有相关的工程应用经验&#xff0c;只是纯粹对相关算法感兴趣才写此博客。所以如果有…

C#: Json序列化和反序列化,集合为什么多出来一些元素?

如下面的例子&#xff0c;很容易看出问题&#xff1a; 如果类本身的无参构造函数&#xff0c; 就添加了一些元素&#xff0c;序列化&#xff0c;再反序列化&#xff0c;会导致元素增加。 如果要避免&#xff0c;必须添加&#xff1a; new JsonSerializerSettings() { Object…

Node爬虫项目精简版 wallhaven网站实操 2023.8.29

练习地址&#xff1a; https://wallhaven.cc/toplist const express require(express); const axios require(axios); const cheerio require(cheerio); const schedule require(node-schedule); const fs require(fs);async function downloadImage(url) {const response…

SpringBoot案例-基础登录功能

根据页面原型&#xff0c;明确需求 页面原型 需求 账号密码输入正确方可进入 阅读接口文档 接口文档连接如下&#xff1a; https://hkm-web.oss-cn-beijing.aliyuncs.com/%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3 思路分析 后端接收到前端传递的用户名及密码之后&#xf…

Unity打包Windows程序,概率性出现无法全屏或分辨率不匹配

排除代码和Resolution and Presentation面板设置问题 如果程序还是不能按照预期的分辨率运行&#xff0c;应该是系统注册表记录了对应的设置。 解决方案&#xff1a; 打开注册表&#xff0c;使用快捷键“Win” "R"组合快捷键。在打开后面键入命令&#xff1a;Rege…

安装Ubuntu服务器、配置网络、并安装ssh进行连接

安装Ubuntu服务器、配置网络、并安装ssh进行连接 1、配置启动U盘2、配置网络3、安装ssh4、修改ssh配置文件5、重启电脑6、在远程使用ssh连接7、其他报错情况 1、配置启动U盘 详见: U盘安装Ubuntu系统详细教程 2、配置网络 详见&#xff1a;https://blog.csdn.net/davidhzq/a…

简易虚拟培训系统-UI控件的应用3

目录 Button组件的组成 Button组件方法1-在Button组件中设置OnClick()回调 Button组件方法2-在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中&#xff0c;本篇增加使用按钮来控制显示哪一篇文字信息。 Button组件的组成 1. 新建Button&#…

Node.js crypto模块 加密算法

背景 微信小程序调用飞蛾热敏纸打印机&#xff0c;需要进行参数sig签名校验&#xff0c;使用的是sha1进行加密 // 通过crypto.createHash()函数&#xff0c;创建一个hash实例&#xff0c;但是需要调用md5&#xff0c;sha1&#xff0c;sha256&#xff0c;sha512算法来实现实例的…

springboot整合modbus4J(一)

springboot整合modbus4J 1. 介绍 (1) modbus poll&#xff1a;modbus主机仿真器&#xff0c;用于测试和调试modbus从设备。该软件支持modbus rtu、ASCII、TCP/IP。用来帮助开发人员测试modbus从设备&#xff0c;或者其它modbus协议的测试和仿真。它支持多文档接口&#xff0c…

【推荐】Spring与Mybatis集成整合

目录 1.概述 2.集成 2.1代码演示&#xff1a; 3.整合 3.1概述 3.2 进行整合分页 接着上两篇&#xff0c;我已经写了Mybatis动态之灵活使用&#xff0c;mybatis的分页和特殊字符的使用方式接下来把它们集成起来&#xff0c;是如何的呢&#x1f447;&#x1f447;&#x1…

「Redis」1. 数据类型的底层实现

前言&#xff1a;在这篇博文中&#xff0c;我们将简单总结在面试中怎么回答Redis数据类型的底层实现。 因为面试时间就那么点&#xff0c;言简意赅的描述自己会的知识显得尤为重要‼️ 文章目录 0.1. String 的底层实现原理0.2. 列表的底层实现原理0.3. 字典的底层实现原理0.4.…

LeetCode56.合并区间

这道题我想了一会儿&#xff0c;实在想不到比较好的算法&#xff0c;只能硬着头皮写了&#xff0c;然后不断的debug&#xff0c;经过我不懈的努力&#xff0c;最后还是AC&#xff0c;不过效率确实低。 我就是按照最直接的方法来&#xff0c;先把intervals数组按照第一个数star…

Wireshark数据抓包分析之互联网控制报文协议_ICMP

一、实验目的: 通过使用wireshark抓取的ICMP数据包对这个ICMP控制报文进行分析 二、预备知识&#xff1a; 1.ICMP协议概述&#xff1a;ICMP是Internet Control Message Protocol的缩写&#xff0c;即互联网控制报文协议。它是TCP/IP协议族的一个子协议&#xff0c;用于IP主机、…

【Linux】如何在linux系统重启或启动时执行命令或脚本(也支持docker容器内部)

如何在linux系统重启或启动时执行命令或脚本&#xff08;也支持docker容器内部&#xff09; 第一种&#xff1a;使用 systemd 服务单元在重启或启动时运行命令或脚本第二种&#xff1a;使用 /etc/rc.d/rc.local 文件在重启或启动时运行脚本或命令第三种&#xff1a;使用 cronta…

打造互动体验:品牌 DTC 如何转变其私域战略

越来越多的品牌公司选择采用DTC 模式与消费者进行互动&#xff0c;而非仅仅销售产品。通过与消费者建立紧密联系&#xff0c;DTC模式不仅可以提供更具成本效益的规模扩张方式&#xff0c;还能够控制品牌体验、获取宝贵的第一方数据并提升盈利能力。然而DTC模式的经济模型比许多…

用 PHP 和 JavaScript 显示地球卫星照片

向日葵 8 号气象卫星是日本宇宙航空研究开发机构设计制造的向日葵系列卫星之一&#xff0c;重约 3500 公斤&#xff0c;设计寿命 15 年以上。该卫星于 2014 年 10 月 7 日由 H2A 火箭搭载发射成功&#xff0c;主要用于监测暴雨云团、台风动向以及持续喷发活动的火山等防灾领域。…