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

这篇具有很好参考价值的文章主要介绍了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;
}

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

 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;
}

c++(8.29)auto关键字,lambda表达式,数据类型转换,标准模板库,list,文件操作+Xmind,c++,开发语言,算法,c语言c++(8.29)auto关键字,lambda表达式,数据类型转换,标准模板库,list,文件操作+Xmind,c++,开发语言,算法,c语言​​​​​​​文章来源地址https://www.toymoban.com/news/detail-680696.html

到了这里,关于c++(8.29)auto关键字,lambda表达式,数据类型转换,标准模板库,list,文件操作+Xmind的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++入门】引用、内联函数、auto 关键字

    从语法上理解,引用就是给变量取一个 别名 ,它没有独立空间,和它引用的变量共用一块空间。 例子: 值得注意的是,C++ 中的引用一经初始化,后面是改变不了指向的(这点与Java有所不同),而且引用是必须初始化的。 引用的类型也必须和原变量对应,显然,你肯定不能

    2024年02月16日
    浏览(47)
  • 【C++】引用、内联函数、auto关键字等

    前言:在前面我们讲解了C++入门基础的一些学习例如命名空间、缺省参数、函数重载等。今天我们将进一步的学习,跟着博主的脚步再次往前迈一步吧。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量C++学习 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关注博

    2024年02月20日
    浏览(68)
  • 【C++】C++入门 auto关键字详解(C++11)

    前言 C语言中包括了auto,它可用于定义局部变量。但自从所有的非全局变量的缺省值假定为auto以来,auto就几乎很少使用了。 在C或者以前C++中,auto基本上可以被无视. 但是在C++11中auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器, a

    2024年02月08日
    浏览(49)
  • 【C++初阶(三)】引用&内联函数&auto关键字

    目录  前言  1. 引用   1.1 引用的概念   1.2 引用的特性  1.3 引用的权限  1.4 引用的使用  1.5 引用与指针的区别 2. 内联函数 2.1  什么是内联函数 2.2  内联函数的特性  3. auto  3.1 auto简介  3.2 auto使用规则  3.3 auto不能使用的场景 4.  基于范围的for循环  4.1 范围for使用

    2024年02月08日
    浏览(61)
  • c++ for循环中使用auto关键字

    代码 编译运行结果 总结 代码 编译运行结果 总结

    2024年02月14日
    浏览(43)
  • 【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字

    在C语言中,同名函数是不能出现在同一作用域的,但是在C++中却可以,但是要满足函数重载的规则。 那什么是函数重载呢?它的规则是什么呢? 函数重载 :是函数的一种特殊情况,C++允许在 同一作用域 中声明几个功能类似的 同名函数 ,这些同名函数的 形参列表(参数个数

    2024年04月26日
    浏览(55)
  • C++面试八股文:了解auto关键字吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第15面: 面试官:了解 auto 吗? 二师兄:嗯,了解一些(我很熟悉)。 面试官:说一说 auto 的用法吧? 二师兄: auto 主要是为了编译器进行类型推导。比如: 二师兄:也可以作为函数返回类型的占位符: 二师兄:在C

    2024年02月09日
    浏览(44)
  • 21天学会C++:Day7----auto关键字

    · CSDN的uu们,大家好。这里是C++入门的第七讲。 · 座右铭:前路坎坷,披荆斩棘,扶摇直上。 · 博客主页: @姬如祎 · 收录专栏:C++专题 目录 1. 知识引入 2. auto的使用 2.1 auto与指针和引用结合起来使用 2.2 在同一行定义多个变量 2.3 auto不能推导的场景  2.3.1 auto不能作

    2024年02月08日
    浏览(51)
  • 【C++入门必备知识:|引用| +|auto关键字| + |范围for|】

    在这里插入图片描述 引用不是新定义一个变量,而是给已经存在的变量取别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存区间。 比如水浒传里的李逵 小名叫铁牛,江湖人称黑旋风。这些都是他,只不过名字不同。 类型 引用变量名=引用实体

    2023年04月22日
    浏览(52)
  • 【C++初阶】引用&内联函数&auto关键字&范围for循环&nullptr

    ========================================================================= 个人主页还有更多系列专栏: 小白不是程序媛 我的小仓库: Gitee C++系列专栏: C++头疼记 ========================================================================= 目录 前言 引用 概念 引用的特点 常引用  引用的使用场景 做参数  做返

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包