自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yhcuac

记录学习的过程

  • 博客(48)
  • 收藏
  • 关注

原创 python socket编程介绍以及遇到的问题

前言学习python socket编程主要的参考资料为《socket-programming-in-python-cn》, 英文原版地址在这里, 中文版pdf下载在这里。一.echo客户端和服务器的介绍以及问题:服务端代码如下:#!/usr/bin/env python3# -*- coding: utf-8 -*-import socketHOST = '127.0.0.1' #本...

2019-07-16 22:22:55 532

原创 浅谈C语言中的数的转化与运算

浅谈C语言中的有符号和无符号数的转化(读《深入理解计算机操作系统(第三版)》有感)通常在计算机系统里,一个字节由8位组成,范围即为0~255(2^8-1)在计算机系统里,通常声明的类型的字节数和范围如下:有符号无符号32位64位charunsigned char11shortunsigned short22intunsigned int...

2018-11-30 22:19:58 390 4

转载 makefile学习

makefile学习我这里是跟着陈皓老师的博客学习的,陈皓老师博客的链接如下:跟我一起写 Makefile(一)跟我一起写 Makefile(二)跟我一起写 Makefile(三)跟我一起写 Makefile(四)跟我一起写 Makefile(五)跟我一起写 Makefile(六)跟我一起写 Makefile(七)跟我一起写 Makefile(八)跟我一起写 Makefile(...

2018-10-29 12:44:21 230

原创 Linux下GDB调试简介

Linux下C/C++调试工具gdb简介GDB(GNU Debugger)是Linux下的一个调试工具,具体的功能有: - 设置断点,使得代码在制定行暂停执行; - 单步调试程序; - 查看程序中的变量值的变化; - 动态改变程序的执行环境; - 分析崩溃程序产生的core文件;假设我们有源文件hello.c,要使用GDB进行调试,在程序编译时就必须使用-g或者-gdb选项:...

2018-09-17 15:32:47 309

原创 计算机网络小结

计算机网络由于没有系统的学过计算机网络,因此只能总结一些常见的计算机网络的面试题。一. OSI参考模型OSI参考模型分为7层: - 物理层:负责0,1比特流,代表电压的高低; - 数据链路层:负责物理层面的互连节点之间的通信传输,数据帧的生成和传输; - 网络层:将数据传输到目标地址,这一层主要负责寻址和路由选择; - 传输层:负责两个节点(例如两台计算机)之间的数据传输,...

2018-09-17 15:30:55 170

原创 图论小结

一.图论的基本概念有向图(有向边),无向图(无向边),顶点集合,边集合,顶点数(阶),边数;完全图,有向完全图,稀疏图,稠密图,平凡图(只有一个顶点),零图(没有边);顶点的度数,奇点,偶点,最小度,最大度;基本定理:度数之和等于边数的两倍;度序列,可图(有限序列是度序列);Havel-Hakimi定理:判断序列是否可图;二部图(偶图),完全二部图,二部图判定(无奇圈);同构;...

2018-09-07 17:18:17 244

原创 基本输入输出和复合数据类型

基本输入输出头文件包含:stdio.h1.格式化输入输出输出:printf("格式化控制字符串", 输出项);“格式化控制字符串”的形式为: 格式化输出函数printf:%[输出最小宽度][.精度][长度]类型例如:double d = 123.456;print("d=%9.2f", d)

2018-08-30 16:02:10 237

原创 编译器对源代码的编译过程

编译器对源代码的编译过程对于C/C++源代码的编译,可以使用gcc(GNU Compiler Collection,GNU编译器集合)/g++进行编译。 gcc/g++分别是GNU的C/C++编译器,GNU是“GNU is Not Unix”的首字母缩写,GNU项目Richard Stallman在1983年9月27日公开发起的,GNU软件可以自由使用、复制、修改和发布,由此产生的GNU通用...

2018-08-07 14:02:39 4742

原创 二叉树的常见算法

一.二叉树的遍历算法二叉树的遍历可分为三种:先序遍历,中序遍历和后序遍历。 按照惯例,左孩子优先于右孩子,那么: - 先序遍历指的就是先访问本节点,再访问该节点的左孩子和右孩子; - 中序遍历指的就是:先访问左孩子,再访问本节点,最后访问右孩子; - 后序遍历指的就是:先访问左右孩子,最后访问本节点。树的节点的数据结构常声明为:struct TreeNode { i...

2018-08-05 16:28:21 53833 7

原创 并查集算法:Union-Find

并查集算法:Union-Find一.算法简介并查集算法是为了解决一类连通性的问题,连通是一种等价关系,满足自反性,对称性和传递性。 - 自反性:p和p是连通的 - 对称性:假设p和q是连通的,那么q和p也是连通的 - 传递性:假设p和q是连通的,q和r也是连通的,那么可以推出p和r也是连通的从连通性这种等价关系,我们可以将对象划分成等价类,等价类中的任意两个元素都是连通的。...

2018-08-03 10:34:36 285

原创 常见位运算总结

常见位运算总结常见的位运算有六种:and运算,按位与:&有零为零or运算,按位或:|有一位一xor运算,按位异或:^相同为零,不同为一not运算,按位取反:~shl运算,左移:<<shr运算,右移:>>优先级从上往下递减~<<, >>&^|&am

2018-07-29 12:34:00 469

原创 git学习总结

git学习总结很早之前在廖雪峰老师的网站上学习的git,参见链接Git教程。总结一下常见的git操作。 git的四个分区workspace(工作区):我们平时写代码,对代码的直接修改就是在这个工作区中。index/stage(暂存区):修改代码之后,需要对代码进行保存,就保存在这个暂存区。respository(本地仓库,版本库):代码保存在暂存区之后,可以再commit到...

2018-07-27 23:26:03 195

原创 STL迭代器简介

STL迭代器简介STL将容器(Containers)和算法(Algorithms)分隔开,两者之间的纽带就在于迭代器(Iterators)。 迭代器也是一种智能指针,重载了例如常见的operator*以及operator->。 迭代器有常见的五种相应型别:iterator_categoryvalue_typedifference_typepointerreference...

2018-07-23 22:12:48 509

原创 C++从内存分区到动态内存分配

C++从内存分区到动态内存分配一.C++内存分区C++内存分区分为五个部分: 堆,栈,自由存储区,常量存储区,静态/全局存取区。 - 堆:new分配的内存块,程序员使用完必须自己delete,如果忘记,操作系统会在程序结束后释放该内存。 - 栈:编译器需要时自动分配内存,常见的比如局部变量、函数参数等。 - 自由存储区:由malloc分配的内存块,和new类似,需要自己使用fr...

2018-07-19 20:25:37 309

原创 设计模式之建造者模式

设计模式之建造者模式建造者模式解决的问题: 当创建的对象很复杂(通常是由其它对象组合而成)时,我们将创建的过程分离开,一步一步进行对象的创建,在每一步中可以引入参数,使得可以经过相同的步骤得到不同的对象。 结构图如下: 具体代码如下://Product.h#ifndef PRODUCT_H_#define PRODUCT_H_#include <iostream&...

2018-07-16 23:16:31 112

原创 设计模式之单例模式

设计模式之单例模式Singleton(单例)模式是最常见的,最容易实现,最应该掌握的设计模式。 单例模式解决的问题非常常见:如何去创建唯一的一个类对象(变量)?在C++语言中,通常维护一个静态成员变量来记录这一个唯一的对象,再通过一个静态接口instance来获取这一个实例。 结构图如下: 主要参考自《设计模式精解-GoF 23种设计模式解析附C++实现源码》作者:K_Eckel, ...

2018-07-15 22:21:30 151

原创 《Linux命令行大全》读书笔记三:编写shell脚本

第二十四章:编写第一个shell脚本shell脚本是一个包含一系列的命令的文件,shell读取这个文件,然后执行这些命令。三个步骤: - 编写脚本 - 使脚本可执行 - 将脚本放置于shell能够发现的地方脚本的格式,最简单的一个脚本:#!/bin/bash# This is our first scriptecho 'Hello World!'将上述脚本保存为hel...

2018-07-11 23:00:05 292

原创 《Google C++编码规范》读书笔记第八章:格式

《Google C++编码规范》读书笔记第八章:格式一.行长度(Line Length)每一行的字符数不超过80。 优点:。。。 缺点:反对该原则的人则认为更宽的代码更易阅读,80字符的限制是上世纪60年代的缺陷,现在拥有更大的显示屏,很轻松地显示更多地代码。 结论:有这些例外 1. 如果包含注释或者URL,可以超过80行。 2. 头文件保护可以无视。 3. 包含长路径的可...

2018-07-10 23:20:50 264

原创 《Linux命令行大全》读书笔记二

第十章:进程ps:查看进程信息。 直接输入ps,会得到两个进程的信息:bash和ps。 选项:r //运行状态s //睡眠状态d //不可中断的睡眠状态t //暂停状态Z //无效或者僵尸状态< //高优先进程n //低优...

2018-07-09 22:40:47 143

原创 常见的排序算法

常见的排序算法包括:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序。 排序算法 最好时间 最差时间 平均时间 空间 是否稳定 冒泡排序 O(n) O(n^2) O(n^2) O(1) 稳定 选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定 插入排序 O(...

2018-07-08 23:10:20 131

原创 《Google C++编码规范》读书笔记第五章:其它C++特性

《Google C++编码规范》读书笔记第五章:其它C++特性一.引用参数(Reference Arguments)定义:如果需要改变参数的值,在C语言中可以使用指针形参,在C++中还可以使用引用形参。 优点:使用引用形参更优雅一点,例如拷贝构造函数,而且不必像指针那样接受空指针NULL。 缺点:容易引起误解,引用在语法上是拥有指针的语意的。 总结:在函数形参列表中,如果有引用形...

2018-07-08 09:19:30 191

原创 《Linux命令行大全》读书笔记一

第一章:shell是什么shell接受键盘书输入的命令,传递给操作系统来执行,几乎所有的Linux都提供shell程序。 在终端仿真器中(Terminal Emulator)写shell命令。 在终端不要尝试ctrl-c或者ctrl-v,对于shell而言,鼠标中键是粘贴键。 简单的shell命令:data //显式日期cal //显示当月日历df /...

2018-07-04 23:19:47 768 1

原创 《Google C++编码规范》读书笔记第七章:注释

《Google C++编码规范》读书笔记第七章:注释注释对于代码的可读性是非常重要的 一.注释风格(Comment Style)使用//或者/* */都可以,只要统一就好二.文件注释(File Comments)在每一个文件里加入版权公告,然后是文件内容描述。依次: 1. 版权(copyright statement),例如:Copyright 2008 Goog...

2018-07-03 22:43:23 309

原创 设计模式之工厂模式

设计模式之工厂模式一.普通工厂模式为了提高内聚和松聚合,抽象出一些类的公共接口以形成抽象基类,然后声明基类指针指向派生类对象,以达到多态的目的。当有很多派生类继承自该抽象基类时,需要写很多new,而且客户必须知道派生类的名称才能生成该对象,如果不知道要实例化哪一个具体的派生类,也就无法使用new。 工厂模式的两大功能: - 定义创建对象的接口,封装了对象的创建; - 将具体化类的...

2018-07-03 20:33:30 156

原创 C++字符串与C语言中的字符串处理函数

C++字符串与C语言中的字符串处理函数一.C++中的字符串类下面是简单的一种实现:#ifndef STRING_H_INCLUDED#define STRING_H_INCLUDEDclass String{public: String (const char* cstr = 0); String (const String&); St...

2018-07-02 22:55:56 744

原创 《Google C++编码规范》读书笔记第六章:命名约定

《Google C++编码规范》第六章:命名约定一.通用命名约定(General Naming Rules)函数命名,变量命名,文件命名应该就有描述性,不要过度缩写,类型和变量应该是名词,函数可以用“命令性”动词。 对于缩写,只有当放到项目外仍然非常明确,否则不要使用缩写:int num_dns_connections;//dns是大部分人都明白的也不要省略字母的缩写:...

2018-07-02 22:40:02 207

原创 C++11一些新特性

C++11一些新特性一.可变参数模板(Variadic Templates)新特性允许模板定义中含有任意多个的模板参数,这种新特性的写法与普通模板是差不多的,只是加上了省略号...。 省略号的作用: 1. 声明一个参数包,这个参数包可以包含一个或者任意个模板参数。 2. 在模板定义的右边,可以将参数包展开成一个一个独立的参数。 举个简单的例子:void print() ...

2018-07-01 22:21:15 200

原创 《Google C++编码规范》读书笔记第三章:类

《Google C++编码规范》第二章:类类是C++中的基本单元。一.构造函数的职责(constructor)在构造函数执行那些trivial的初始化,可能的话,使用Init()函数执行那些non-trivial的初始化。 定义:执行初始化操作。 优点:排版方便,无需担心类是否初始化。 缺点: - 构造函数中不易报告错误,不能使用异常 - 操作失败会引起对象初始化失败,导...

2018-06-29 20:33:48 206

原创 《Google C++编码规范》读书笔记第二章:作用域

《Google C++编码规范》第二章:作用域一.命名空间(namespace)定义:命名空间将全局作用域分成不同的、具名的作用域。 优点:命名空间可有效防止全局作用的命名冲突,例如两个命名空间pro1::Foo和pro2::Foo就不会冲突。 缺点:命名空间具有迷惑性,在头文件中使用不具名的空间容易违背C++的唯一定义原则(One Definition Rule, ODR)(在此...

2018-06-28 21:33:28 320

原创 C++资源管理之智能指针

C++资源管理之智能指针在《Effective C++》一书中,大师Scott Meyers用了一章的篇幅来说明C++资源管理的一些内容,本文以此为基础。  1.RAIIRAII:Resourse Acquisition Is Initialization(资源获取即初始化),将资源放到管理对象中,管理对象使用析构函数来确保资源释放。2.常见的智能指针常见的智能指针有这些:...

2018-06-27 22:09:49 146

原创 《Google C++编码规范》读书笔记第一章:头文件

《Google C++编码规范》:第一章.头文件c++源文件在windows系统.cpp,在Linux/Unix下则为.cc,通常一个源文件对应一个.h头文件。正确使用头文件令代码在可读性,性能上都有很大的改观1.#define的保护#define是一种防御式声明,防止头文件被多重包含,命名格式:<PROJECT>_<PATH>_&a

2018-06-27 20:25:50 231 3

原创 《More Effective C++》读书笔记第二章:操作符

第二章:操作符条款五.对定制的类型转换函数保持警觉一个类中的隐式类型转换符的形式是:operator type();这是一个有点奇怪的函数:关键词operator加上一个类型名称再加上一个括号。例如有理数类:class Rational {public: Rational(int numerator = 0, int denominator = 1); ...

2018-06-13 22:24:09 144

原创 《More Effective C++》读书笔记第一章:基础议题

第一章:基础议题条款一.仔细区分pointers和references首先,没有NULL reference(空引用),但是可以有NULL pointer(空指针)。考虑这样的情况:char *pc = 0;char& rc = *pc;这难道就是空引用了吗?错,这是未定义的行为,编译器可能产生任何输出,要杜绝这种行为,所以千万不要考虑让reference成为NU...

2018-06-12 22:10:35 187

原创 《Effective C++》读书笔记第二章:构造析构赋值运算

Constructor, Destructors and Assignment Operator条款5.了解C++默默编写并调用了那些函数如果声明一个空类,编译器会为这个空类声明拷贝构造函数,拷贝赋值运算符,默认构造函数以及析构函数,并且这些都是public且是inline,还是trivial(平凡的,无价值的)。 对于trivial,我的理解是: - 比如trivial defaul...

2018-06-10 22:20:06 189

原创 《深度探索C++对象模型》读书笔记第六章:执行期语意学

《深度探索C++对象模型》读书笔记第六章:执行期语意学C++在执行期的一些变化,例如临时对象的产生,临时对象的构造和析构成本是我们需要考虑的,我们将在第三节具体讲解。一.对象的构造和析构一般而言,我们将object尽可能放置在使用它的那个程序区段附近,这样可以节省非必要的对象的构造和析构成本。全局对象已经初始化全局对象均存储在data segment(数据段),未初始化...

2018-05-29 17:24:57 442

原创 《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学

《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constructor中或者在其他member functions中指定初值。纯虚函数的存在纯虚函数,虚函数在声明后加上 = 0,纯虚函数的意义在于只定义一个可继承的接口,并没有实现(虚函数意义在于定义一个可继...

2018-05-25 14:45:09 824 3

原创 《深度探索C++对象模型》读书笔记第三章:Data语意学

《深度探索C++对象模型》读书笔记之 Data语意学类的大小(sizeof)一个空类的大小通常为1,是因为编译器为其安插了一个char,以便这个类的任意两个object能够在内存中配置独一无二的地址。 一个类的大小通常与机器和编译期有关,受以下三个因素的影响: 1. 语言本身的额外负担 比如支持虚函数,或者虚继承。 2. 编译器对于特殊情况的优化处理 某些编译器会对empty...

2018-05-24 13:11:50 899 2

原创 约瑟夫环问题

约瑟夫环问题约瑟夫环问题: 首先,让n个小朋友们围成一个大圈。然后,随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,哪个小朋友会得...

2018-05-23 19:37:56 182

原创 《深度探索C++对象模型》读书笔记第二章:构造函数语义学

《深度探索C++对象模型》读书笔记之 构造函数语义学编译器背着程序员做了很多事,explicit关键字的导入,是为了制止“单一参数的constructor”被当作一个conversion运算符。这一章中,挖掘了编译器对于“对象构造过程”的干涉,以及对于“程序形式”和“程序效率”的冲击。 一.Defalut Constructor的构造过程关键:是编译器需要(就会合成默认构造函数)...

2018-05-23 17:05:43 654 2

原创 斐波那契数列及其对数时间算法

斐波那契数列及其对数时间算法前些天做IEEE校内算法赛的时候,遇到了一道关于斐波那契数列的题,要求是对数时间;今天在牛课网上刷leetcode,看到爬楼梯问题,于是在网上搜索了一下,自己参考并总结了下斐波那契数列及其算法。主要参考了知乎这个问题下的回答最高赞回答。 斐波那契数列大家应该都很熟悉:0 1 1 2 3 5 8… ,递推公式如下: f(n)={f(n−1)+f(n−2)if2≤n...

2018-05-22 16:55:32 1746

空空如也

空空如也

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

TA关注的人

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