自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 剑指offer中的代码整理学习记录

剑指offer中的代码整理学习记录学完这本书中的代码就准备跳槽,后续会记录自己的一些笔记和学习心得面试题1:赋值运算符函数class CMystring{public: CMystring(char *m_pData = nullptr); CMystring(const CMystring & string); ~CMystring(void); //重载复制运算符 CMystring& operator=(const CMystring &string)//函

2021-03-27 22:45:44 129

原创 effective C++学习---条款14:在资源管理类中小心coping行为

/*在堆上申请的内存,可以使用上节提到的auto_ptr和trl::shared_ptr,但是这也只限于内存资源,还有很多其他资源也需要像内存资源一样,在使用结束后要及时释放,所以我们需要建立我们自己的资源管理类,在构造函数中取得资源,在析构函数中释放资源。*/class Lock{public: explicit Lock(Mutex* pm) :mutex(pm)//传入的时候...

2019-08-19 12:36:04 465

原创 effective C++学习---条款17:以独立语句将newd对象置入智能指针

/*条款17:以独立语句将newd对象置入智能指针*/processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());/*在调用该函数前,编译器编译器必须创建代码,完成以下三件事:1,调用priority2,执行“new Widget”3,调用tr1::shared_ptr构造函数但是,C++编...

2019-08-19 12:35:00 186

原创 effective C++学习---条款15:在资源管理类中提供对原始资源的访问

/**APIs往往要求访问原始资源,所以每一个资源管理类应该提供一个“取得其锁管理的资源”的办法*对原始资源的访问可能经由显示转或隐式转换,一般而言,显示转换比较安全,但隐式转换客户使用起来更加方便*///显式的,直接返回原始指针int days = dayHeld(pInv.get());//隐式的调用class Investment{public: bool isTaxF...

2019-08-19 12:34:42 139

原创 effective C++学习---条款16:成对使用new和delete时要采取相同形式

/*用new时有两件事情发生: 内存被分配出来 针对内存会有一个构造函数被调用(对相关内存管理的类进行初始化)用delete时同样也是有两件事发生: 针对内存有一个析构函数被调用(对相关内存管理的对象进行释放) 内存被回收delete最关心的就是,即将被删除的内存内究竟有多少个对象,这决定需要调用多少个析构函数;即将被删除的那个指针指向的是单一对象还是对象数组*/de...

2019-08-19 12:34:04 125

原创 effective C++学习---条款13:以对象管理资源

class Investment {}; //投资类型Investment* createInvestment(); //一个创建对象的接口,返回创建的对象的地址void f()//这种简单方式可能会在程序段的中间发生返回或抛出,造成无法执行delete,泄露内存{ Investment * pInv = createInvestment();//创建对象 ...

2019-08-17 12:40:03 98

原创 effective C++学习---条款12:赋值对象时勿忘其每一个成分

/**Coppying函数应该确保赋值“对象内的所有成员变量”及“所有base class”成分*不要尝试以某个coppying函数实现另一个从coppying函数。应该将共同机能的代码放在*第三个函数中,并由这两个coppying函数调用*//*本条没有什么很难理解的,就是在写构造函数和拷贝构造,还有等号赋值时不要忘记为类中的每一个成员变量赋值,还有就是有继承关系的类不要忘记为基...

2019-08-16 21:07:27 126

原创 effective C++学习---条款11:在operator=处理“自我赋值”

/*本条款说的是重载等号时要考虑自身赋值的情况*/class Bitmap{ };class Widget{public: Widget &operator=(const Widget& rhs);private: Bitmap* pb;};/*这种写法不能处理自我赋值的情况,当rhs和pd指向同一块空间时delete操作就把rhs的内容也释放掉了*/W...

2019-08-16 20:45:27 117

原创 effective C++学习---条款10:令operator=返回一个reference to *this

/*自定义类一般会重载等号运算符,为可以实现连等操作所以会返回*this的引用*/class Widget{public: Widget& operator=(const Widget& rhs)//=,+=.-=,*=这些类似的操作都可以用 { //返回*this的引用来实现 return *...

2019-08-16 20:44:34 111

原创 effective C++学习---条款9:绝不在构造和析构中调用virtual函数

#include<iostream>using namespace std;/*本条款指出在构造函数和析构函数中不要调用虚构函数*/class Transaction{public: Transaction(); virtual void logTransaction() const = 0;};Transaction::Transaction(){ logT...

2019-08-16 18:29:41 106

原创 effective C++学习---条款8:别让异常逃离析构函数

#include<iostream>#include<vector>using namespace std;/*本条款是处理析构函数中抛出异常的情况的*/class Widget{public: ~Widget(){} //假设析构函中可能抛出异常};void doSomething(){ std::vector<Widget>...

2019-08-16 17:26:49 154

原创 effective C++学习---条款7:为多态基类声明Virtual析构函数

#include<iostream>using namespace std;/*本条款使用的前提是存在多态基类的情况,先来复习一下多态的三个条件要有继承要有方法的重写(virtual)要用父类指针指向子类对象用基类指针指向父类对象,释放该指针时,就有泄露内存的风险*/class Timekeeper{public: Timekeeper(); ~Timek...

2019-08-16 16:28:00 95

原创 effective C++学习---条款6:若不想使用编辑器自动生成的函数,就该明确拒绝

#include<iostream>#include<string>using namespace std;/*在没有自定义的情况下,编译器会为我们生成构造、析构、拷贝构造和重载等号运算函数但是并不是所有情况,我们都喜欢编译器的这种做法,那么如何去避免编译器自动生成这些函数呢,下面提供了两种方法类屏蔽自动生成的拷贝和赋值操作*/class HomeForSa...

2019-08-16 14:14:13 93

原创 effective C++学习---条款5:了解C++默默编写并调用哪些函数

#include<iostream>#include<string>using namespace std;/*声明已个空类时,编译器会为它声明一些东西*/class Empty{public: Empty(){} //默认构造函数是午餐的构造函数 Empty(const Empty&a...

2019-08-16 11:50:20 127

原创 effective C++学习---条款4:确定对象被使用前已先被初始化

#include<iostream>using namespace std;/*我们知道C++中的一些做法是沿用了c中的,而C中的变量定义一般都不能保证初始化,如array;C++中后来特有的部分一般都不能保证初始化,如vector。*//*初始化和赋值的区别:在定义变量的时候,操作系统会对变量进行分配空间,在这个时候进行赋值就叫初始化;等到分配完空间后,再进...

2019-08-16 10:46:00 109

原创 effective C++学习---条款3:尽可能使用const

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<vector>#include<string>using namespace std;/*const的使用就是在告诉编译器和程序的使用者,某个值应该保持不变这样编译器和使用者都会来遵守这项规则*///const修饰指针voi...

2019-08-15 19:44:32 110

原创 effective C++学习---条款2:尽量以const enum inline替换#define

//define定义的常量是属于整个文件,在预编译时进行替换#define ASPECT_RATIO 1.653const double AspectRatio = 1.653;int f(int a){ return a + 12;}#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))//写宏调用时一定要将每一个变量都加括号,宏调用会...

2019-08-15 14:48:44 121

原创 C++同时提供4种新的强制类型转换形式const_cast、dynamic_cast、 reinterpret_cast和 static_cast

C++同时提供了4种新的强制类型转换形式(通常称为新风格的或C++风格的强制转 型):const_cast(expression)、dynamic_cast(expression)、 reinterpret_cast(expression)和 static_cast(expression),每一种都适用于特定的目的,具体如下:(1)dynamic_cast 主要用于执行“安全的向下转型(safe...

2019-08-01 15:54:27 137

转载 如何学习分布式

一很好的分布式学习文章特记录一下,怕下次找不到!

2019-07-23 10:05:14 85

原创 多线程中互斥量、死锁和解决死锁的方法

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>#include<fstream>#include<vector>#include<map>#include<list>#include<typeinfo>#includ...

2019-07-19 17:17:54 290

原创 string、vector和map的序列化和反序列化

最近在做序列化和反序列化的学习,在此记录一下,以后写了新的数据类型再加进来。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>#include<fstream>#include<vector>#include<map>#include<li...

2019-07-18 21:09:01 3253

原创 string类中存放的是常量还是变量

string是一个被封装好的类,可以进行字符串的操作,如字符串相加,但是我们知道字符串是常量怎么可以进行相加呢?难道string把字串复制到栈中来了吗,其实不是的,它是在堆中重新开辟了一块空间,然后把原来的空间释放掉了。说白了,string就是一个指向堆区的一个指针,做出的字符串操作都在堆区进行。string str="sss";str+="qqq";如果你进行如下操作,将得到和你想象的不...

2019-07-18 17:58:49 2159

原创 用容器来管理多个线程

//线程入口函数void my_func(int a){ cout << "我的线程编号为:" << a << endl;} vector<thread> mythread; for (int i = 0; i < 10; i++) { mythread.push_back(thread(my_func, i))...

2019-07-17 21:31:32 240

原创 在使用memcpy往string和vector中复制数据时引发的问题

问题的引发在学习序列化和反序列化的时候,使用memcpy进行复制操作。首先介绍memcpy函数的参数:void *memcpy(void *dest, void *src, unsigned int count);//第一个参数是要复制的空间的首地址//第二个参数是要进行复制的空间的首地址//要复制的字节数/*下面这段代码就包含了我遇到的问题*/string str1 = "121...

2019-07-16 13:27:51 1496

转载 C++动态库封装及调用

这里直接保存一篇文章,只保存连接应该不算转载的吧!https://blog.csdn.net/zhangfuliang123/article/details/71515796

2019-07-15 14:25:26 419

原创 在多线程程序中detach的使用引发的问题

创建临时对象为线程参数用detach时,子线程引用主函数中的参数会引发很多问题,例如:变量还没有复制到子线程中就已经被收回。若传递int这种简单类型参数,建议是值传递,必要用引用和指针,避免界外生枝。如果传递类对象,避免隐式类型转换。全部在创建线程这一行构建出临时对象来,然后在函数参数里,用引用来接,否者会多构造一次对象。建议不适用detach(),只使用join():这样就不会出现局...

2019-07-15 13:16:43 2245 1

原创 有关文件的读写

写二进制文件和读二进制文件#include<iostream>#include<string>#include<fstream>#include<bitset>using namespace std;void Save(){ int i[10] = {4,2,1,2,3,4,5,6,7,1}; int len = 10; ...

2019-07-12 19:42:05 99

原创 进程与线程的关系

进程说的直白一点,一个exe文件执行就会创建一个进程,这是系统自行创建的。调度和资源分配都是有系统完成的。线程首先,线程是由进程创建的,一个进程可以创建一个主线程,主线程结束进程就随之结束了。在主线程执行的同时,可以手动创建子线程,子线程可以执行主线程之外的程序。子线程和主线程之间可以并发执行,提高执行效率。但是线程也不是越多越好,每一个线程都需要独立的堆栈空间,而且线程之间的切换需...

2019-07-12 10:16:33 359

原创 用socket模拟登陆过程

之前写过一个简单的服务器和客户端的信息交流的程序,这个登陆就是在之前的程序的基础上稍作修改得到的。将登陆信息传给服务器,服务器在获得数据会进行判断,然后给出相应的返回。主要的修改点就是将结构体数据转换成字符串来传输,服务器接收到数据后再转化成结构体,然后给出判断。serve.cpp#include <winsock2.h>#pragma comment(lib, "ws2_32....

2019-07-11 20:07:33 470

原创 关于在函数名前出现双冒号::的语法说明

双冒号::的用法是用来限定名字空间的,比如std::cout表示在std名字空间下的cout函数,但是::sort()又是什么意思呢?原来地址空间中的/的用法比较类似,::表示在名字空间中取更深层,用在函数名前就表示顶层命名空间,相当于全局变量。#include<iostream>#include<algorithm>using namespace std;clas...

2019-07-11 12:01:07 4144 3

原创 CreateThread创建的多线程程序(C++)

以下时候关于CreatThread函数的参数介绍,这是在使用该函数之前必须要掌握的。handle=CreateThread( NULL, // 没有安全描述符 0, // 默认线程栈的大小 MyThread, // 线程函数指针 ...

2019-07-11 11:34:14 1118

原创 用Thread创建多线程的C++程序

代码比较乱,素材也是来自网络,如果有什么问题可以联系我处理。这份代码给出了一种简单创建多线程的方法,创建线程时传入函数地址即可。当然还有别得方法像CreateThread,自认为该方法比较复杂#include<thread>#include<iostream>using namespace std;void foo()//简单的无参函数{ cout <...

2019-07-11 11:18:38 619

原创 用socket实现基于udp的聊天

该程序比较简单,只能是一方发数据,另一方收数据server.cpp/*服务器端*/#include <iostream>#include<windows.h>using namespace std;#pragma comment(lib,"ws2_32.lib")void main(){ WORD wVersionRequested; WS...

2019-07-10 21:29:37 870

原创 用Socket实现基于TCP的聊天

程序比较简单,在一个时刻只能有端能发数据,另一方接受数据server.cpp/*服务器的函数*/#include<iostream>#include<windows.h>using namespace std;#pragma comment(lib,"ws2_32.lib")void main(){ //前面的这一部分是版本协商器 WORD w...

2019-07-10 21:25:54 503

原创 基于用secket实现TCP协议的简单聊天(用到多线程)

以下内容有部分来之网络,如有侵权或者疑问可以联系我处理这个版本可以是基于多线程实现的,服务端个客户端各创建两个线程,分别用来收数据和发数据。server.cpp#include <winsock2.h>#pragma comment(lib, "ws2_32.lib") #include <iostream> #include <thread>u...

2019-07-10 21:21:25 381

原创 Python 爬虫基础学习--网络爬虫与信息提取

Python 爬虫基础学习Requests库的安装Win平台: “以管理员身份运行”cmd,执行 pip install requestsRequests库的7个主要的方法Requests库中2个重要的对象:Request和ResponseResponse对象包含爬虫返回的内容,也包含请求的Request信息。Requests库的异常Requests对网页进行访问时时时刻...

2018-12-05 12:29:47 173

原创 非线性方程的几种线性解法(二分法,不动点法和牛顿法)

非线性方程的几种线性解法对于线性方程我们有很多方法来解,比如简单的线性方程都会有公式直接来计算。但是涉及到复杂的线性方程比如高阶多项式方程,非线性性方程也是很那直接求解的,在数值分析的角度就很容易来求解这类方程了。下面介绍的就是几种简单的非线性方程的数值解法。二分法由根的存在性定理:如果f(a)f(b)&amp;lt;0,我们判定至少存在一个根在区间[a,b]上。那么下面我们怎么将这个范围内的根找...

2018-11-29 12:47:55 13541

原创 最大似然估计的学习

首先聊聊题外话,很久没有写博客了,一直喜欢用本子来记录学习过程,但是这样会有一个很大的弊端,就是本子保存不了多久,最后还是选择以博客的方式来记录所学的东西。这样复习起来都会方便一些。我现在是一名在校生,以后学习的新东西尽量都会记录下来,有相同经历的朋友可以关注一下,一起交流。最大似然估计最大似然估计是在已知样本分布,且已知数据的分布模型,只是不知道模型的具体参数的情况下,用来估计参数的一种方法...

2018-11-27 21:38:50 393

原创 K近邻(KNN)算法的学习

K近邻算法首先应该明白K近邻算法是一种分类算法,这里不作实际问题抽象成数学模型的解释,只在数学方面来说明。背景已知一系列的数据点被分成了几个类,现在有一个新的未知点,那么该把这个未知点归为哪一类呢?这就是K近邻算法来解决的问题。算法在未知点附近找出K个最近邻的点(一般K取较小的奇数)查询出的这K个点分别属于哪个类将未知点归于包含最多点的那个类PS:需要指出的是,在寻找最近邻点是...

2018-11-27 21:38:38 145

原创 Python中常用的第三方库

Python中常用的第三方库库名用途numpyn维数据表示和运算matplotlib二维数据可视化numpyn维数据表示和运算pil图像处理scikit-learn机器学习和数据挖掘requestHTTP协议访问和网络爬虫jieba中文分词beautiful soupHTML和XML解析器wheelPython...

2018-11-08 11:20:53 2767

弹球小游戏Python源代码

一个Python小游戏供大家学习,对于新手或者对Python小游戏感兴趣的朋友。

2018-10-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除