c++
少女,你的代码掉了
头秃少女的日常思考
展开
-
个人学习 -- KMP算法
如此愚钝 一天才学会KMP算法的思想就是,如果已经匹配的模式串内部有重复的部分,那么我们移动的时候就能多移动几步,而且由于模式串的大小都是固定的,所以我们可以提前的求出有哪些部分是重复的。这里说的重复是指,前缀子串和后缀子串举个例子: e x a m p l e前缀子串: e , ex, exa, exam , examp , exampl后缀子串: e , le , ple, ...原创 2020-01-04 16:19:29 · 98 阅读 · 0 评论 -
AVL树学习
AVL树为什会出现?我们之前有学习使用二叉查找树,但是二叉查找树在使用的时候也会出现一些问题,当恰好所有的数据都是按照大小顺序插入的话,就有可能将我们的二叉树编程链表,就导致树结构退化为链表结构。什么是不平衡其实不平衡就是一个节点下面的左子树和右子树的高度相差太多,没有雨露均沾,导致出现了不平衡的现象。如何解决不平衡?其实我们从局部看,不平衡的情况其实就归为四种。左—左类型其实对于...原创 2020-01-02 16:31:32 · 139 阅读 · 0 评论 -
服务端开发被我忽略的点
Linux c++服务端设计菜而不自知才是无药可救 —> 说我呢/(ㄒoㄒ)/这几天一直在看muduo库的代码,结合着陈硕老师的书《Linux多线程服务端编程 – 使用muduo c++ 网络库》。还记得我第一次使用网络库是在大二下学期的时候,用了boost库,但是用的我也是一脸懵逼,很多都是照着官网的例子去做修改,最后反正能完成服务功能就是谢天谢地。这次学习成功的让我又多了一位崇拜的...原创 2020-01-01 16:08:45 · 176 阅读 · 0 评论 -
2.线程的创建、结束
程序结束的标志一个进程的结束的标志就是主线程是否执行完毕,当属线程执行完毕时,意味着整个程序已经结束。这样我们其他的线程的任务执行可能会被强行的终止。所以如果我们想要保持指现场的正常运行,我们需要主线程的寿命大于等于子进程时候,这样才能将子进程的任务全部执行完。当然如果想要让主线程和其他线程是分离的状态,也就是说想要让线程自己去回收自己的资源也不是不可以。这种状态我们一般称之为detach...原创 2019-07-28 16:31:55 · 170 阅读 · 0 评论 -
多进程 多线程的概念
1.并发两个或多个任务同时发生一个程序,同时执行多个独立的任务被称作为并发。在以往的计算机终端和CPU在某一个时刻其实只能执行同一个任务,这个是由它的系统统一调度居你们给每个任务分配固定的时间,对于单核的CPU来说,只要切换的时间频率够快够短,就看起来像是同时在执行好几个程序。这个其实不算是真正的并发,这种切换是要有时间开销的,因为要保存一些局部的变量,状态执行进度等等都需要保存下来。...原创 2019-07-28 15:40:37 · 128 阅读 · 0 评论 -
c++ decltype关键字的使用
使用这个关键字的作用是找到某一个表达式的类型。其实是类似于typeof但是没有typeof,其实每一个类型是有一个typeid的其实是你是可以获得这个id并且打印出来的,但是ID打印出来也没有什么意义。c++11导入了一个新的关键字,就是decltype具体的使用可以看下方当我们想要知道一个容器里面包含了什么类型的元素的时候我们可以使用decltype来获取里面的数据类型,通过对象来取...原创 2019-07-27 15:27:24 · 868 阅读 · 0 评论 -
c++ noexcept 的用法
使用方法void foo() noexcept;声明上面的函数不会抛出异常,如果一个异常没有在函数里面被处理,这个函数就会终止这个程序,抛出std::terminate,之后就会调用std::abort。而且你也可以用另一种方法去声明这个函数抛出异常的方式比如下面这个,表示如果x.swap(y)不抛出异常的话,那么整个的都不会抛出异常void swap(Type& ...原创 2019-07-27 13:32:27 · 3164 阅读 · 0 评论 -
c++ using的一些用法
在谈谈using 在c++2.0之后的新增用法之前,还需要先了解一下什么叫做Alias Template。之后才能更好理解为做什么要这么使用。1.结合Alias Template所使用的对模板typedef什么是Alias Template?就是设计一个模板,并且对这个模板的类型进行typedef操作。下面看一下的使用template <typename T>usi...原创 2019-07-27 12:35:53 · 192 阅读 · 0 评论 -
1. Variadic Template 模板参数可变
介绍模板的参数在照往常来说是固定的大小之后让编译器进行推导,但是现在c++11出现了新的东西就是模板函数的参数可以使不确定的。下面来看一个实例template <typename T , typename... Types>void Print(const T & FirstArg,const Types &... arg){ cout <&...原创 2019-07-21 11:12:04 · 268 阅读 · 0 评论 -
c++ 虚函数 虚函数表 个人理解
参考文章:https://blog.csdn.net/qq_20309055/article/details/79298593整理一份关于虚函数和继承关系的脑图前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白...转载 2019-07-05 13:40:59 · 197 阅读 · 0 评论 -
effective c++ 条款 4 5 6 7 8
条款4:确保变量之前初始化过变量的初始化和变量的赋值首先就是两个概念,初始化是为变量开辟一定的空间,但是赋值是为变量赋初值,和初始化有本质的不同。对于内置类型的成员变量,必须手动完成对变量的初始化。例如int x = 0;const char * text = "A C-Style String" ;double b;std::cin >> b;但是对于非内置...原创 2019-01-23 17:02:31 · 170 阅读 · 0 评论 -
effective c++ 条款 9 10 11 12
条款9:绝对不在构造和析构函数运行时调用virtual函数在base class构造期间virtual函数绝不会下降到derived class阶层,取而代之的是对象调用的是base class里面的函数。所以,此时的虚函数不能作为虚函数来看。因为派生类在调用基类的构造函数的时候,它本身被视作为base类所以不会有正确的函数被调用。条款10:使operator= 返回一个referen...原创 2019-01-23 17:03:36 · 157 阅读 · 0 评论 -
effective c++ 条款13 14 15 16 17
条款13:以对象管理资源在一个对象被开辟出来之后,需要占据一定的内存空间,如果空间是new出来的,就需要在合适的地方delete掉这款空间。如果调用delete析枸的是对象本身的话,一旦某些地方出现异常的话,或者是提前return导致来不及释放空间,就会导致内存泄露。有两个思路解决这些问题获得资源之后立即放进管理对象当中。使用auto_ptr管理对象,将对象作为初始化的参数放进去。 ...原创 2019-01-23 17:04:41 · 195 阅读 · 0 评论 -
C++时间戳转换成标准时间
对方发过来的时间格式是时间戳,我这边需要解析成普通的日期格式,参考了下面的帖子https://www.cnblogs.com/kaituorensheng/p/3922919.html使用的是time.h里面函数,还是c的函数比较好用void JsonMeterMessage::timeConvert(string timeStamp){ stringstream s...转载 2019-04-14 00:18:21 · 5657 阅读 · 2 评论 -
基础算法之二叉树 1 平衡二叉树的判断
什么是平衡二叉树?平衡二叉树指的是二叉树的每一个节点的左子树和右子树的高度差为不大于1所以由此推出判断的条件有每一个子树如果有一个出现不是平衡二叉树的话就一定不是平衡二叉树 如果遍历得到的某一个节点出现了,二叉树的高度之差大于1也不是二叉树 每次遍历之后都要返回左右子树的深度 如果该节点满足二叉树的要求,该二叉树的深度就是它下面最高的子树的大小加上自己的大小#include ...原创 2019-04-14 20:02:01 · 163 阅读 · 0 评论 -
STL源码剖析读书笔记 迭代器概念traits编程技法
迭代器的设计思维--STL设计理念STL在设计的时候希望达到将数据结构和算法分离开来独立设计,最后再使用一点耦合剂来使它们联系起来。这里举了一个容器、算法、迭代器的例子,就是find函数,对于不同类型的迭代器,都可以讲其中的数据与value进行对比,其实表面上看上去迭代器是依附于容器的,那么迭代器是如何设计的呢?它的本质又是什么?template <class InputIte...原创 2019-04-15 01:50:02 · 142 阅读 · 0 评论 -
boost.asio async_read_some 和 async_read
这次做的这个项目就遇到一些问题想要达到的效果是每次先读取100字节的内容,之后根据这里面的数据长度的提示去找到接下来需要继续读出来的数据长度是多少,但是还是遇到了一些问题没有解决。所以又回头去看了一下API到底都是怎么回事。首先我之前使用的是ip::tcp::socket::async_read_some()basic_stream_socket::async_read_someT...原创 2019-04-24 01:34:45 · 9212 阅读 · 0 评论 -
strlen函数以及string类使用心得
复习一下strlen函数其实,给strlen函数之后它就会向下偏移统计个数,遇到当前位置字符为'\0'才会停下来。如果没有的话就有可能接着往下走下去,甚至会超过开辟空间的区域指向一片未开辟空间赋值的空间。所以服务端这边接收的buffer要比需要接收的数据大小大一点才不会在strlen的时候出现问题,因为数组里面的数据都占满了,最后一个'\0'的位置没留下来,粗心大意。函数原型...原创 2019-05-11 15:05:31 · 3155 阅读 · 0 评论 -
c++ 异常处理
程序异常的概念主要是指出现了一些很少发生或者出乎意料的状态,通常显示一个程序的错误或者要求一个必须回应的。如果不能满足这个回应则会经常造成程序卡死不能进行相应的处理。c语言里面有几个异常管理机制,这些标准在c++里面也可以用,但是c++设计了更加方便的基本不可见处理方式。使用try与catch块就可以实现对程序异常的捕捉和处理,但是注意的是一定要保证所有的异常的类型和抛出异常类型的一致...原创 2019-07-02 20:32:50 · 399 阅读 · 0 评论 -
shared_ptr智能指针设计与使用
管理pointer很难我们需要保证当许多个指针指向同一个对象的时候,我们怎么去管理这些指针,并且不希望出现空悬指针和多次析构一个指针的情况出现。通常为了解决以上的尴尬,我们使用智能指针来实现对于pointer的管理。smart pointer可以实现知道自己什么时候应该释放自己的内存,而不至于影响到其他场合对于块内存的使用。但是在使用智能指针的时候我们仍需要考虑到其特点不然也会为其的智能化...原创 2019-07-04 18:51:27 · 193 阅读 · 0 评论 -
weak_ptr智能指针
为什么需要weak_ptr?因为虽然我们可以使用shared_ptr指针,但是不得不说使用shared_ptr还有一些不美好的地方需要注意和解决,所以我们的weak_ptr也是为了帮助解决这些问题而设计出来的。问题如下:环向指向:两个共享指针之间互相指向,所以就永远也不会出现计数器减为0的情况出现所以,就不会释放资源。 想共享但是不愿意拥有:比如说引用的寿命其实比引用的对象存活时间长...原创 2019-07-04 19:51:53 · 299 阅读 · 0 评论 -
effective c++ 条款18 19 20 21
条款18:让接口容易被使用,不易被误用在设计之前需要了解到用户可能会犯什么样的错误。原书中举例,设计一个表现日期的classclass Date{public: Date(int month, int day, int year); //...};这个最初的接口看起来没什么毛病但是,用户可能在输入的时候弄错次序并且可能会输入错误的不符合实际情况的日期格式。可以...原创 2019-01-26 14:15:08 · 228 阅读 · 0 评论