当前位置: 首页 > news >正文

0908 C++标准模板库和异常处理

Part 1.梳理思维导图

Part 2.编程

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

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

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

#include <iostream>
#include <fstream>
#include <vector>using namespace std;class Stu
{friend ostream& operator<<(ostream& os,const Stu &s);friend istream& operator>>(istream& is,Stu &s);private:string name;int id;string classname;
public:Stu(){}Stu(string name,int id,string classname):name(name),id(id),classname(classname){}virtual ~Stu(){}
};
ostream& operator<<(ostream& os,const Stu &s)
{os << s.name << " " << s.id << " " << s.classname << " " << endl;return os;
}istream& operator>>(istream& is,Stu &s)
{is >> s.name >> s.id >> s.classname;return is;
}
int main()
{vector<Stu> v;Stu s("张三",1,"1001");v.push_back(s);Stu s1("李四",2,"1002");v.push_back(s1);Stu s2("王五",3,"1003");v.push_back(s2);ofstream ofs;ofs.open("E:/QT PROJECT/25061C++/day8 0908/work/Stu.txt",ios::out);for(const auto &x : v){ofs << x;}ofs.close();ifstream ifs;ifs.open("E:/QT PROJECT/25061C++/day8 0908/work/Stu.txt",ios::in);vector<Stu> v2;Stu is;while(ifs >> is)v2.push_back(is);ifs.close();for(const auto &x : v2){cout << x;}return 0;
}

一.C++中的数据类型转换

        1.概念

C++存在多种类型,数据类型转换用于在不同数据类型间转换

        2.隐式类型转换

C++编译器自动执行的转换,基本在表达式中发生

int num_int = 16;
double num_double = num_int;

        3.显式类型转换

                a.静态转换static_cast

用于基本类型转换和指针

int num_int = 16;
double num_double = static_cast<double>(num_int);
                b.动态转换dynamic_cast

通常用于多态类之间的指针或者引用类转换,在运行是进行类型检查,只能用于具有虚函数的类之间转换

class Base
{virtual void fun(){}
};
class Child:public Base {};Base *base_ptr = new Child;
Child *child_ptr = dynamic_cast<Child *>(base_ptr);
                c.常量转换const_cast

用于添加或移除指针或者引用的常量性(const)

const int num_const = 5;
int *num_ptr = const_cast<int *>(&num_const) //去除const限定符
                d.重新解释转换reinterpret_cast

执行低级别的位模式转换,通常用于指针间的类型转换

int num = 29;
float *ptr =reinterpret_cast<float *>(&num) ;

二.异常

        1.异常的定义

程序运行时发生的不正常事件

        2.处理

try: ------->将可能发生异常的地方 用try包裹

throw: ------>将发生异常的地方用throw进行抛出

catch: ------>捕获接受异常

#include <iostream>using namespace std;int fun(int a, int b)
{if(b != 0)return a/b;elsethrow 1;
}int main()
{try{cout << fun(10,0) << endl;} catch (int a){if(a == 1)cout << "分母不能为0" << endl;}return 0;
}

三.C++标准模板库(STL)

        1.STL的组成

容器、算法、迭代器

容器:存放数据的

        数组、链表、顺序表、、、、

算法:函数--->解决问题 ---->增删改查

迭代器:就是算法和容器的粘合器(==指针)

        2.vector容器

vector就是数组,也称为单端数组,和普通数组有区别,普通数组是静态空间,而vector空间时动态拓展的。

动态拓展:不是在原来的空间上续接新的空间,而是重新申请新的空间,将原来空间里的内容,复制到刚刚申请的空间中。

需要包含头文件#include

                a.vector的构造函数

vector v; //构造函数

vector(const vector &other); //拷贝构造函数

vector(v.begin(),v.end()) ; //把区间[v.begin(),v.end())的数据拷贝给对象

vector(n,elem); //将n个elem拷贝给对象

                b.vector赋值函数

vector &operator=(const vector &v); //拷贝赋值函数

assgin(v.begin(),v.end()) ;//将区间[v.begin(),v.end())赋值给对象

assgin(n,elem); //将n个elem赋值给对象

                c.vector的容量大小

empty() //判断容器的是否为空

size() //容器的大小 元素的个数

capacity() //容量

resize() //重新设置大小

                d.vector 的插入和删除

push_back() //尾插

pop_back() //尾删

insert(iterator_pos,elem); //在迭代器所指向的位置,插入数据

insert(iterator_pos,n,elem);//在迭代器所指向的位置,插入n个数据

eraser(v.begin(),v.end()) // 把区间的数据删除

clear() //清空

                e.元素的访问

at(int index);

operator[] (int index);

front(); //第一个元素

back(); //最后元素

        3.set 容器

set是一种包含唯一元素的容器,元素会安装特定的排序方式自动排序。其特点时每个元素只出现一次,排序方式默认是升序排序。

                a.操作

插入:insert()

查找: find()

删除: erase()

遍历: 可以通过迭代器遍历set中元素。

        4.map 容器

map是一个键值对容器,其中每个元素由一对key和value组成,每个key是唯一的。map会根据key自动排序,排序的方式默认为升序。

                a.操作

插入: insert() 插入键值对

查找:find() 用于查找指定的key

删除:erase() 用于删除指定key. 整个键值对都删

访问值: 可以通过[]操作符 或者 at() 访问值


文章转载自:

http://6GWUNcNl.tfwsk.cn
http://LurHKojF.tfwsk.cn
http://NwHFjI0S.tfwsk.cn
http://9lRNEftg.tfwsk.cn
http://kPzcfW2t.tfwsk.cn
http://3UXtfqfn.tfwsk.cn
http://ZWQe2CkL.tfwsk.cn
http://E7rceira.tfwsk.cn
http://uebzbRu1.tfwsk.cn
http://FzsSuGcT.tfwsk.cn
http://jrw16nVe.tfwsk.cn
http://XH4zihtf.tfwsk.cn
http://NVjaLTcC.tfwsk.cn
http://4Cg9DFxW.tfwsk.cn
http://e2IymSzJ.tfwsk.cn
http://eXaelJwl.tfwsk.cn
http://A0sLfM0T.tfwsk.cn
http://O6CJc4uR.tfwsk.cn
http://N6jBRqiz.tfwsk.cn
http://ZWfWWUWh.tfwsk.cn
http://FHOD4NqM.tfwsk.cn
http://1r4NIzEM.tfwsk.cn
http://bUq1nRs0.tfwsk.cn
http://SezASYLE.tfwsk.cn
http://1LUXUGnD.tfwsk.cn
http://M2J0nE4L.tfwsk.cn
http://KkHfSyXw.tfwsk.cn
http://zbtPsKJ9.tfwsk.cn
http://2MjprKwX.tfwsk.cn
http://d7pXzVgo.tfwsk.cn
http://www.dtcms.com/a/373708.html

相关文章:

  • 【PostgreSQL内核学习:基于 ExprState 的哈希计算优化—— GROUP BY 与 SubPlan 的性能提升】
  • Hive基础简介
  • Hive实战(一)
  • SQL 函数从入门到精通:原理、类型、窗口函数与实战指南
  • 嵌入式 - ARM2
  • 【后端】阿里巴巴 Java 开发规范 —— 换行速查表
  • 基于 OpenCV 的信用卡数字识别:从原理到实现
  • 为什么要做智慧养老?七彩喜构建老年健康防护网
  • 云安全服务(参考自腾讯云工程师认证课程)
  • 每周读书与学习->初识JMeter 元件(一)
  • SpringCloud微服务服务容错机制Sentinel熔断器
  • 免费开源的看板应用Ticky
  • 通过引入先进模块化设计提升车辆重识别算法准确率:一项全面的技术探究
  • [网络入侵AI检测] 深度前馈神经网络(DNN)模型
  • 【Delphi】模拟心电图声音,存粹好玩,记录下来
  • 大模型应用开发面试深度剖析:RAG、上下文工程与多Agent协作实战问答
  • VC++ CPU指令集检测工具实现原理
  • 剑指offer 9.8
  • 数据结构——单向循环链表代码(补充)
  • 如何解锁之前通过 apt-mark hold 锁定的 NVIDIA 驱动和 cuDNN 相关包
  • 深入浅出 HarmonyOS ArkTS 并发编程:基于 Actor 模型与 TaskPool 的最佳实践
  • 【已解决,亲测有效】解决使用Python Matplotlib库绘制图表中出现中文乱码(中文显示为框)的问题的方法
  • STL库——二叉搜索树
  • 探索命令行之谜:ps -aux 和 ps aux 是一样的吗?
  • leetcode11(H 指数)
  • TensorRT自定义量化 对数量化
  • 【Python】S1 基础篇 P4 if 语句指南
  • 在使用ffmpeg与音转文模型时,会报错音转文stack expects a non-empty Tensor List
  • 苏州ecovadis认证500人内费用多少?
  • 基于Zigbee设计的楼宇环境监测系统_278