流光56
码龄4年
关注
提问 私信
  • 博客:17,979
    17,979
    总访问量
  • 50
    原创
  • 1,694,319
    排名
  • 4
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:浙江省
  • 加入CSDN时间: 2021-03-18
博客简介:

weixin_56262931的博客

查看详细资料
个人成就
  • 获得54次点赞
  • 内容获得2次评论
  • 获得35次收藏
创作历程
  • 50篇
    2022年
成就勋章
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

STL模板库笔记

对于关联容器(set\multiset\map\multimap),删除当前iterator时,仅仅会让当前的迭代器失效,可以在erase时,递增当前的iterator可以连续删除 set.erase(it++),因为它们底层都是。映射容器,是由 (key/value)组成的元素(字典、键值对),要求键值对中的key不能重复,而且会根据key进行排序,要求key的类型必须支持 < 运算符。集合容器,特点是元素不重复,会对元素自动排序,因此它存储的元素必须支持 < 运算符,只能迭代器遍历访问。
原创
发布博客 2022.11.07 ·
230 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

STL模板库笔记

功能:把链表lst指定[start,end)位置的元素合并到当前链表的指定pos位置中,位置以迭代器形式提供,lst会删除[start,end)位置开始的元素。= = < > 会对容器进行整体比较,根据字符串的比较规则进行比较(一个个元素按照字典序比较,一旦比较出结果就结束)功能:把链表lst指定del位置的元素合并到当前链表的指定pos位置中,位置以迭代器形式提供,lst会删除del位置开始的元素。功能:把链表lst合并到当前链表的指定位置中,位置以迭代器形式提供,lst会删除所有元素。
原创
发布博客 2022.11.06 ·
295 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

C++笔记

weak_ptr是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的资源,但是不影响该资源的生命周期,也即是weak_ptr指向一个由shared_ptr管理的资源时,shared_ptr。当智能指针离开了作用域时,它的析构函数就会自动释放,析构函数中执行了常规指针的释放操作,从而做到了自动释放内存的效果,避免了内存泄漏。无论是否由weak_ptr指向,一旦指向资源的shared_ptr计数为0,资源就释放,weak_ptr更像是shared_ptr的助手。
原创
发布博客 2022.11.03 ·
491 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

C++笔记

函数模板的类型参数也可以像成员函数的参数一样设置默认类型,规则与成员函数的默认形参一致,但是只有C++11语法才支持,编译需要加 -std=gnu++0x\ -std=c++0x。6、特化函数的形参和返回值类型的基础类型要与模板函数的基础类型要一致,否则会报错,例如:函数模板中使用了引用,特化也要加引用,也就是除了被特化的类型不同,其它要一致。模板虽好但是不是万能的,不能解决所有问题,有些特殊的类型与普通类型的运算规则不同,因此需要给特殊类型实现一个特殊版本,称为函数模板的特化版本,例如 char*
原创
发布博客 2022.11.01 ·
552 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++笔记

注意:在以二进制方式读写对象时,对象的成员不应该有指针(以及string)类型,因为在写入时只会写入指针成员变量(地址编号),而下一次读取该指针变量时,该指针所指向的内存极大。注意:在读写内建类型数据时,原有的 > 运算符就可以直接进行文本读写,但是在对类对象进行读写操作时,绝大多数的类成员变量是private,因此无法直接在类外进行读写。注意:C++中文件I/O流的write只有两种结果,要么num个字节全部写入成功,要么一个都没有写入,只需要使用good\fail 判断是否写入成功。
原创
发布博客 2022.11.01 ·
365 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++笔记

在父子类中,当子类覆盖了父类的同名虚函数,然后用父类指针或引用访问虚函数时,它既可能调用父类的虚函数,也可能调用子类的同名函数,具体调用哪个取决于该父类指针或引用。构造函数不能设置为虚函数,假如构造函数可以设置为虚函数,子类的构造函数会自动覆盖父类的构造函数,当创建子类对象时,子类执行自己的构造函数之前先执行父类的构造函数,但是。6、在执行子类的构造函数时,会按照继承表中的顺序执行父类的构造函数,默认执行的是父类的无参构造,可以在子类的构造函数的初始化列表中显示地调用父类的有参构造,最后才执行子类的。
原创
发布博客 2022.10.31 ·
2862 阅读 ·
1 点赞 ·
0 评论 ·
10 收藏

C++笔记

在实现类的全局运算符函数时,可能会使用类内的私有成员,此时全局运算符函数是没有访问权限,如果把私有成员变成public会打破类的封装性,或者实现get函数会很麻烦,C++提供了。注意:单目运算类的运算符对象都可以带常属性,因此重载的单目运算符函数必须是常函数,并且运算过程中都不会改变自身的值,而是产生一个临时的计算结果,并且是右值,只能返回带const。2、由于输入、输出运算符的调用者是左边的cin、cout,我们无法实现它们的成员运算符函数,只能实现全局的输入输出运算符函数。
原创
发布博客 2022.10.31 ·
77 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++笔记

2、虽然不能直接访问普通成员变量和普通成员函数,但是静态成员函数的作用域依然算作类内,因此只要让静态成员函数获得类对象的指针或引用,则依然有权限访问private、protected的。3、静态成员函数可以当做访问静态成员变量的接口,这样一方面不会破会静态成员变量的封装性,另一方面可以不需要创建对象即可调用静态成员函数,让类本身具有管理自己成员的能力。1、没有隐藏的this指针了,所以静态成员函数中无法直接访问普通成员变量和普通成员函数,但是可以直接访问静态成员变量和静态成员函数。
原创
发布博客 2022.10.30 ·
125 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++笔记

普通情况下编译器自动生成的拷贝构造完全够用,但是当类中的成员有指针且为指针分配了堆内存,默认的拷贝构造只会对指针的值进行拷贝,这样就导致了两个对象的指针成员都指向同一块堆。3、如果对象被const修饰过,就不能使用普通成员函数,编译会报错,因为此时传递的对象地址带有const属性,而普通的成员函数隐藏的this指针不带const属性,当类中有成员是指针类型且分配了堆内存,浅拷贝(默认的拷贝构造)只会拷贝指针变量的值,深拷贝不拷贝指针变量的值,而是申请新的内存,拷贝原内存中的内容到新内存中。
原创
发布博客 2022.10.25 ·
77 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++笔记

当调用函数时,编译器会优先调用类型最精确的函数,如果没有则会一定程度的类型提升或者是标准转换,而不是全部直接报错,但具体优先级与编译器有关,因此最优选择最准确的参数即可,内联函数也会被翻译成二进制指令,调用语句不会生成跳转指令,而是直接把函数的二进制指令替换调用语句,这样既没有跳转也没有返回,而是直接往下执行被调函数,这种函数称为内联函数。7、可以定义指针数组,但是不能定义引用数组(可以定义数组指针,也可以定义数组引用,可以定义函数指针,也可以定义函数引用)
原创
发布博客 2022.10.24 ·
151 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++笔记

b、结构中的结构成员可以是成员变量还可以是成员函数,结构变量、结构指针分别使用 . 或 -> 访问成员函数,在成员函数中可以直接访问本结构的其他成员变量、成员函数,不再需要 . ->b、联合中的成员可以是成员变量还可以是成员函数,联合变量、联合指针分别使用 . 或 -> 访问成员函数,在成员函数中可以直接访问本联合的其他成员变量、成员函数,不再需要 . ->在C++中,void*不可以自动转换成其它类型的指针,如果需要赋值给其它类型的指针时,只能强制类型转换后才能赋值,为了提高指针访问内存的安全性考虑。
原创
发布博客 2022.10.22 ·
934 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

网络通信-线程竞争

缺点:该策略实现比较麻烦,而且释放已经申请的资源可能会导致前一阶段的工作无效,反复地申请释放资源也会增加系统开销、占用CPU和寄存器、内存等资源。多个进程或者线程之间互相等待对方手中的资源,在得到新的资源之前不会主动释放自己手中的资源,这样如果形成了等待环路,称之为死锁现象。当一个进程或线程已经占用一个不可被剥夺的资源,并且在请求新资源无法被满足时,则释放已经占用的资源,等待一段时间后重新申请。给每个资源起编号,进程或线程按照编号顺序依次请求资源,并且只有拿到前一个资源,才能继续请求下一个资源。
原创
发布博客 2022.10.11 ·
161 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

网络通信-线程管理

2、早期各个厂商有自己私有的线程库,而且接口的实现差异较大,不利于移植,世界标准化组织与1995年,制定了统一的线程接口标准规范,遵循该标准的线程称为POSIX线程,简称pthread。1、线程是进程的执行路线,它是进程内部的控制序列,或者说线程是进程的一部分(进程是一个资源单位,线程是执行单位,线程是进程的一部分,负责真正的执行)8、进程中的所有线程同在一个虚拟地址空间中,进程中的所有资源对于线程而言都是共享的,因此当多个线程协同工作时需要解决资源竞争问题(加锁)线程栈末尾的警戒缓冲区大小。
原创
发布博客 2022.10.10 ·
342 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

网络通信-多路复用

readfds、writefds、exceptfds 这三个集合参数既是输入也是输出,调用select时这三个集合需要存储被监控的文件描述符,/* Epoll events */ 要监控事件,参考poll。/* file descriptor */ 被监控的文件描述符。/* returned events */ 实际监控到的事件。/* requested events */ 想要监控的事件。2、会把发生事件的描述符返回,不需要遍历所有的描述符,大大地节约时间。
原创
发布博客 2022.09.21 ·
912 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

网络通信-TCP/UDP

* Port number */ 端口号 大端数据。准备通信地址(端口号+ip地址) 准备通信地址(端口号+服务器公网ip地址)关闭socket 关闭socket。功能:把字符串格式的点分十进制表示的ip地址转换成整数形式的ip地址(大端)功能:把整数形式的ip地址(大端)转换成字符串格式的点分十进制表示的ip地址。
原创
发布博客 2022.09.18 ·
156 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

网络进程间的通信

实际传递的是 sockaddr_un或者sockaddr_in 结构体指针,需要把它们统一转换为sockaddr*类型,但是C语言没有自动类型识别转换,需要进行强转。/* AF_UNIX */ 地址簇 domain写什么这就写什么。addrlen:地址结构体的字节数,用于区分 sockaddr_un还是sockaddr_in。
原创
发布博客 2022.09.16 ·
275 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux环境编程-XSI的进程间通信

MSG_NOERROR 如果不包含此标志,如果实际发送过来的数据字节数>接收的字节数,则返回失败,如果包含此标志,那么就只读取接收的字节数,一定会成功。2、如果信号量的值等于0,说明没有资源可使用,此时进程进入休眠,直到信号量的值大于0,进程会被唤醒,执行步骤1。SEM_UNDO 如果进程终止没有手动环资源,系统会自动还。
原创
发布博客 2022.09.15 ·
158 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux环境编程-进程间通信

对于子进程的结束而言,都希望父进程能够知道并作出一定的反应,通过 wait waitpid 函数可以知道子进程是如何结束的以及它的结束状态码。什么是进程间通信,是指两个或多个进程之间交互数据的过程,因为进程之间是相互独立的,为了进程间协同工作就必须实现进程间交互数据。管道是UNIX系统中最古老的进程间通信技术,古老意味着所有系统都支持,早期的管道是半双工通信,现有的系统管道是全双工通信。注意:无论进程是如何结束的,它们最后都会执行同一段代码,会关闭所有打开的文件,并释放所有的内存。
原创
发布博客 2022.09.07 ·
290 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux环境编程-进程管理

孤儿进程:父进程先于子进程结束,子进程就变成了孤儿进程,孤儿进程会被孤儿院(init守护进程)领养,init就是孤儿进程的父进程。1、通过fork创建的子进程会拷贝父进程(数据段、bss段、堆、栈、I/O缓冲区),与父进程共享代码段、子进程会继承父进程的信号处理方式。一个进程可以被另一个进程创建,创建者叫做父进程,被创建者叫子进程,子进程被父进程创建后会在操作系统的调度下同时运行。当子进程先于父进程结束,死前子进程会向父进程发送信号SIGCHLD,此时父进程应该去回收子进程的相关资源。
原创
发布博客 2022.09.06 ·
183 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux环境编程-信号处理

2、当信号处理完后可能会返回产生信号的代码继续运行,如果我们捕获并处理段错误、算术异常等信号可能会产生死循环,正确的处理段错误、算术异常信号应该是备份数据并直接结束程序。当程序执行到一些特殊的操作时,不适合去处理信号,此时可以让内核屏蔽信号,等操作执行完成后再解除屏蔽重新发送信号。当信号产生时,内核会在其维护的信号表中为对应的进程设置与该信号对应的标记,这个过程叫做递送。// 信号处理动作标志。
原创
发布博客 2022.09.05 ·
158 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏
加载更多