自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 c++ 转换函数 convert function

学习侯捷老师视频,做了如下测试code#include<iostream>#include<vector>#include<string>//#include<Windows.h>using namespace std;class fra { public: fra(int i,int j ) :m_i(i),m_j(j) { } operator double() const { return (do

2021-09-12 21:56:37 648

原创 svn--常见命令

命令的使用1、检出svncohttp://路径(目录或文件的全路径) [本地目录全路径]--username 用户名 --password 密码svncosvn://路径(目录或文件的全路径) [本地目录全路径]--username用户名 --password 密码svncheckouthttp://路径(目录或文件的全路径) [本地目录全路径] --username 用户名svncheckoutsvn://路径(目录或文件的全路径) [本地目录全路径]--u...

2021-09-12 21:52:50 1088

原创 macro for ## #

众多C++书籍都忠告我们C语言宏是万恶之首,但事情总不如我们想象的那么坏,就如同goto一样。宏有一个很大的作用,就是自动为我们产生代码。如果说模板可以为我们产生各种型别的代码(型别替换),那么宏其实可以为我们在符号上产生新的代码(即符号替换、增加)。关于宏的一些语法问题,可以在google上找到。相信我,你对于宏的了解绝对没你想象的那么多。如果你还不知道#和##,也不知道prescan,那么你肯定对宏的了解不够。我稍微讲解下宏的一些语法问题(说语法问题似乎不妥,macro只与preproce

2021-09-12 21:50:07 173

原创 c++模式设置之命令模式和迭代器模式

命令模式:将要执行的命令封装成一个对象,可以使用多个对象对应多个命令,对于请求排队和记录请求日志,以及支持可撤销的操作。实际是将每个command封装起来,变成一个class中的member function,利用虚函数 可以实现运行时绑定,但是会牺牲性能。函数对象的范式编程也可以做到,实现编译时绑定,性能更高。迭代器模式:类似STL中的迭代器设计思路,将算法和容器用迭代器连接。该模式定义:提供一种方法顺序访问容器的对象,又不能暴露容器的内部表示,改变其内容。STL 中的迭代器.

2021-04-01 19:55:48 81

原创 学习c++新特性(五)正则表达式/并发并行

头文件 <regex>

2020-12-24 09:53:56 114

原创 学习C++新特性(四)智能指针与内存管理

shared_ptr make_shared<T> 分配创建传入参数的对象,get() 获取原始指针 reset() 减少一个引用计数,use_count()查看引用计数 auto it = make_shared<int> (19); //声明一个it的对象 cout << *it<<" "<<it.use_count()<<endl; //19 1 计数内容 shared_ptr<int&g..

2020-12-23 17:23:41 132

原创 学习C++新特性(三) (容器)

线性容器 std::array 大小固定,可以与c兼容 &arr[0],有如size()、sort()函数 std::forward_list 列表容器 单向链表实现,常数复杂度插入无序容器 内部通过Hash表实现,插入和搜索元素的平均复杂度为常数 std::unordered_map/std::unordered_multiset unordered_set /unordered_multiset元组 make_tuple<T,U,...&gt...

2020-12-23 16:07:57 198

原创 学习C++新特性(二)

1、右值引用c++11之前,左值:表达式之后还持久存在的对象;右值:表达式结束后不存在的临时对象;c++11之后右值分纯右值、将亡值;纯右值:纯粹的字面量(如 10,true)或者求值结果相当于字面量或匿名临时对象。(字符串字面量只有在类中是右值,在普通函数中是左值)。将亡值:即将被销毁却能移动的值。右值引用:T && 将临时对象传递给变量,使得将亡值延续。使用move可以将左值改为右值引用 string s1="this is "; //.

2020-12-21 17:52:28 171

原创 学习C++新特性(一)

1、禁止类的复制。boost下的做法是 是将拷贝构造函数和赋值操作符设置为private;新特性下 可以用delete关键字来实现。class father{ public: father() { cout<< "father()"<<endl; } father( father& f) = delete; father& operator= ( const father& ) = delete;};2、枚举的

2020-12-17 10:47:58 120

原创 boost 安装

主要是linux的安装1、从GitHub上下载的代码https://github.com/boostorg/boost.git2、进入boost 执行 ./bootstrap.sh 生成 可执行程序b23、运行 ./b2 install (非root用户要加sudo )

2020-12-12 16:30:39 349

原创 bison&flex

bison和flex是开源的文本解析器,使用时paser.y写的具体遇到符合的字符怎么做,可以引入c++的类,对象,进行判断parse.l 写的是遇到的关键字和正则匹配,诸如解析时的细节。编译时 调用flex 和 bison命令 分别编译.l文件和.y文件,生成对应的cpp文件再在调用这些解析函数的代码cpp文件中调用该解析函数,入参一般是**in 前缀取决于.y的文件名。先写到这 后续再补...

2020-12-09 19:55:09 216

原创 c++程序常见core处理--2020-09-07

首先遇到core文件,一般会采用gdb+进程执行命令+core名称(遇到core文件带单引号的可以用\转义下)。定位到core的代码行数,一般分两种情况:1、代码是自己业务代码行。这种情况下一般情况比较容易解决,大部分为:1、对空指针操作;不管别的模块是否判断指针,对指针操作前一定要先判空。2、数组溢出;要注意取值范围,常见的是字符串的问题。3、类析构时出现;当进程是通过调用共享库编译出的库时,如果某个库...

2020-09-07 11:45:10 1233

原创 多线程总结-2020-09-07

头文件 <mutex>std::mutexlock()、unlock() 需要在离开函数的地方解锁std::lock_guard() 实现互斥元RAII 不要把受保护的数据引用或指针传递到锁的范围之外。举例:stack<vector<typename>> 中进行出栈并复制出栈的值 操作 先复制要出栈的元素,再调用pop()函数删除出栈元素可能出现的问题:pop函数删除了 但是 元素太大未能复制成功导致失败解决:1、在pop()传入要引用的对象作为引用...

2020-09-07 11:43:49 99

原创 学习socket编程--运输层 tcp udp stcp

udp 全称 user datagram protocol 用户数据报协议 简单 不可靠 无连接的协议 UDP 将消息封装到数据报,再封到IP数据包,然后发送到目的地。tcp transmission control protocol 传输控制协议 三次握手建立连接,四次握手关闭连接 其中time_wait 状态是为了实现tcp双全工连接终止(即处理最终那个ACK丢失的情形),并允许老的重复分节从网络消逝;tcp传输:建立连接->传输数据->释放连接;连接会计算往返时间 rtt...

2020-05-26 19:55:55 270

原创 初学socket编程

做项目经查遇到socket(套接字)的地方,业务的地方大部分直接调用接口,读取到内容后再返回给接口就ok了,但学习要深究其原理,因此决定学习下socket相关的内容,该文章参考了下面这位大佬的文章,不做搬运工,写下自己的理解;https://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html#!commentslinux上通信和通信协议TCP中的三次握手没有直接联系,学习学的三次握手和四次握手释放都是很底层的东西,linux编程提供了sock

2020-05-25 20:35:29 331

原创 redis学习总结-- 内部数据 字符串 链表 字典 跳跃表

redis 是 内存数据库,支持持久化 有rdb和aof两种方式进行持久化,单进程单线程运行,读性能达到11w次/秒,写性能达到8w1次/s;也是key value存储,类型包括字符串、列表、整型、hash表、字典;内部数据结构字符串 用 sds 表示 typedef char *sds; 表头为sdshdr 其中有成员 int len 已经使用长度 int free 还有可用的长度 char buf[] 分配的数据 是个柔性数组;双端链表 查找头节点和尾结点、长度都是常数性能,...

2020-05-23 10:57:55 162

原创 最简单的使用redis自带程序实现c程序远程访问redis服务

代码在下面,包含主要头文件 hiredis.h 用来定义与服务端的连接函数 redisConnectWithTimeout 用来连接,有超时设置;函数 redisCommand 用来执行命令函数 freeReplyObject 和函数redisFree 用来释放 之前的资源。整体代码比较简单,主要是执行命令。#include <stdio.h>#include <stdlib.h>#include <string.h>#include &lt

2020-05-22 17:07:30 637

原创 VMware Workstation Pro虚拟机不可用解决方法

2019年10月20号,在使用VMware Workstation Pro使用的时候,发现提示不可用,在搜索尝试后,发现还是安装VMware Workstation Pro15版最好用,卸载win10的方法不长久,win10的更新是不经同意就直接更新,只能暂停,不能取消。下载VMware Workstation Pro15的链接https://www.vmware.com/products...

2019-10-26 11:57:54 1597

原创 函数模版类模版和偏特化泛化的总结

最近在看侯捷的STL源码解析,遇到了一些模版的概念,先做以下总结,以备日后遗忘可查看。模版分函数模版、类模版和成员模版。源码中主要关于前两种,因此第三种先不做阐述。类模版形式:template <typename T>class FOO{ public: T get_num(); void set_num(T t1);...

2019-10-26 11:51:19 269

原创 python和shell使用的一些总结

python脚本相关1、python可以调用c++的动态库中的函数,对应库为 ctypes 2、python读取配置文件 的库ConfigParser 3、python连接mysql的库 MySQLdb 4、python连接oracle的库cx_Oracle 5、python 移动文件 库 shutil 6、对字符串的使用:split find 很方便 7、处理sqlite3的py...

2019-10-21 15:33:30 132

原创 看《重构-设计模式》第十二章 大型重构

1.梳理并分解继承体系 当某个继承系统承担两项责任时,建立两个继承体系,并通过委托关系让其中一个调用另一个。2.将过程化设计转化为对象设计 当代码有传统过程化风格,将数据记录变成对象,将大块的行为变成小块,并将行为移到相关对象之中3. 将领域和表述/显示 分离 某些GUI类包含了领域逻辑,改法:将领域逻辑分离开建立独立的领域类4.提炼继承系统 对于前期的大部分工作可以修改为一个子...

2019-09-12 13:05:45 156

原创 看《重构-设计模式》第十一章 处理概括关系

1. 字段上移 两个子类都有相同字段时,将字段移到超类中2. 函数上移 各个子类都有相同的函数,将该函数移到超类中3.构造函数本体上移 各个子类中的构造函数本体几乎一致,可以改为在超类中新建一个构造函数,在子类的构造函数中调用它4.函数下移 超类中的某个函数只与部分子类有关,将这个函数移到相关的子类中5.字段下移6.提炼子类 将类的某些特性只被某些实例用到的,放在一个新...

2019-09-11 12:54:25 112

原创 看《重构-设计模式》第九章 简化条件表达式 第十章 简化函数调用

9.1 分解条件表达式 从if else then 中提取单独函数 降低复杂度9.2 合并条件表达式 对于相同测试结果的条件进行合并9.3 合并重复的条件片段9.4 移除控制标记9.5 以卫语句取代嵌套条件表达式 当函数中的条件逻辑难懂时,封装函数来判断条件9.6 以多态取代条件表达式 当条件表达式根据对象类型不同而有不同行为时,将这个条件表达式放在一个子类内的覆写函...

2019-09-10 13:01:56 123

原创 看《重构-设计模式》第八章 重新组织数据

8.1 自封装字段 为字段建立取值和设值函数,类似get_val(),set_val;8.2 以对象取代数据值 将一些有关联的字段放在一个类或者结构体里 便于管理8.3 将值对象改为引用对象 根据对象是否可变,大小来决定8.4 将引用对象改为值对象 同上8.5 以对象取代数组 当数组中的元素代表不同的东西,选择用一个对象来取代8.6 复制“被监视数据” 当有些数据在GUI...

2019-09-09 13:01:53 212

原创 看《重构-设计模式》第七章 在对象之间搬移特性

7.1搬移函数 如果一个类有太多的行动,或者如果一个类与另一个类有太多合作而形成高度耦合。做法:找到使用另一个对象的次数比使用自己所在类的对象的次数还多的函数,将其调用的字段和函数放在另一个类中。7.2 搬移字段 某个字段被所驻类之类的对象使用更多,则将该字段移到其他调用类中 7.3 提炼类 对太复杂的类,负责太多,将其分离,子类化。 7.4 将类内联化 将类中的成员移到其他类,删除该...

2019-09-05 12:58:57 140 1

原创 看《重构-设计模式》第五章 重构列表和第六章 重新组织函数

第五章:重构的记录格式:名称、简短概要、动机、做法、范例寻找引用点:找到对于某个函数、某个字段或某个类的所有引用点,可以通过删除引用点,让编译器帮助找到被悬挂的引用点;这些重构手法有多成熟:基本技巧:小步前进,频繁测试,这些重构手法都是基于单进程软件的。第六章:处理过长函数:提取函数出来,注意局部变量6.1提炼函数 函数粒度变小,复用性变强;高层函数可读性变强;函数的复...

2019-09-03 12:45:25 108

原创 看《重构-设计模式》第四章 构建测试体系

自测试代码的价值:确保所有测试都完全自动化,让他们检查自己的测试结果一套测试就是一个强大的bug侦测器,能够大大缩减查找bug所需要的时间。JUnit测试框架:频繁地运行测试,每次编译请把测试也考虑进来--每天至少执行每个测试一次单元测试和功能测试:功能测试:属于黑盒测试,从客户角度,保证软件可用。当功能测试暴露一个bug时,除了修改错误,还要增加单元测试来暴露这个bug。编写为臻...

2019-08-22 19:25:34 112

原创 看《重构-设计模式》第三章 代码的坏味道

没有特别精确的衡量标准,只能有类似的迹象重复代码:同一个类的两个函数含有相同的表达式。两个互为兄弟的子类内含有相同的表达式。过长函数:找到能提取为子函数的方法之一是找到注释过大的类:分割为子类,可以先根据调用该类的接口进行分割过长参数列:通过对象来传递一些参数发散式变化:某个类因为不同的原因在不同的方向上发生变化,这时候可能需要分割该类了散弹式变化:遇到变化要在不同...

2019-08-20 18:59:59 167

原创 看《重构-设计模式》第二章 重构原则

何为重构:作为名词: 对软件内部结构的一种调整,目的是在不改变软件可观察的行为的前提下,提高其可理解性,降低其修改成本。 作为动词:使用一系列重构手法,在不改变软件可观察的行为的前提下, 调整其结构。为何重构:重构改进软件设计 重构使软件更容易理解 重构帮助找到bug 重构提供编程速度何时重构:三次法则:事不过三,三则重构添加功能时重构修改错误时重构复审代码时...

2019-08-16 12:48:02 168

原创 四种接口隔离模式

接口隔离模式主要有四种:proxy facade adapter mediator;代理、门面、适配器、中介者。proxy:为了解决两个类之间的交互,间接增加一个类用来处理之间的交互,如外部接口直接访问数据库,防止数据库接收到大量数据库导致瘫痪,增加代理类,控制对数据库的访问。facade:用来将一些耦合的类聚集起来,统一使用一个类与外界交互。adapter:适用于旧的接口与新接口进...

2019-08-14 21:03:35 253

原创 看《重构-设计模式》第一章

重构:当你想为程序加上一个特性,发现很难加上时,就先重构该程序。重构之前要保证有一套可靠的测试机制,有自我检验能力。重构的步伐就是以微小的步伐修改程序,即使犯错也很容易发现。注意程序中的命名规范:任何傻瓜都能写出计算机理解的程序,写出人类容易理解的程序才是优秀考虑去除临时变量,大量的临时变量会使函数变得长运用多态替换多次判断(if else 或 switch)涉及重构手法:...

2019-08-14 20:56:06 77

原创 利用vbs发送邮箱

NameSpace = "http://schemas.microsoft.com/cdo/configuration/"Set emailObj = CreateObject("CDO.Message")emailObj.From = "[email protected]" '发件人,需修改emailObj.To = "[email protected]" '收件人,需修改email...

2019-08-07 16:34:32 464

原创 学习c++设计模式--模式简介

好的程序应该是有复用的,代码中会有稳定的结构,变化的结构;对于设计模式来说,就是将变化的模块与稳定的模块设计成相应的模板。模式设计的原则有以下的:单一职责原则类的职责要单一,一个类实现一种功能。引起类的修改只有一种原因,这样降低复杂度开放-封闭原则软件实体(类、函数、模版等)可以扩展,不可以修改。对程序中频繁变化的部分作出抽象依赖倒置原则高层模块不应该依赖底层模块,抽...

2019-08-07 14:18:24 133

原创 读《STL源码剖析》----第一章STL概论与版本简介

STL六大组件containers 容器,如vector,map等 algorithms 算法 如sort、copy等 iterators 迭代器 在容器与算法之间扮演胶合剂作用 functors仿函数 类似函数 --- 不太懂 adapters 配接器 修饰容器、迭代器、仿函数的东西 ----不太懂 allocators 配置器 负责空间配置与管理。关于版本...

2019-07-20 17:03:34 168

原创 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》--关于字符和字符串、函数

关于字符和字符串:c中只有字符数组来存储字符串,需要先声明长度;c++中通过string类型来定义字符串。 c++中string类型的字符串以'\0'来结尾,计算长度用strlen时不包含结尾的字符,用sizeof()函数时包含结尾字符 对c++使用memcpy、memset、memcmp函数时注意操作对象要为POD,即c风格的struct;c++中函数参数传递的3种方式:值传递。分...

2019-07-20 14:05:46 210

原创 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》--关于指针

指针学习记录:指针有两个属性:值和类型。值是存储的地址,类型表示所指向的变量的数据类型。 指针的类型有两个作用:1、指示编译在解引用时从内存读取几个字节;2、指示编译在进行指针类型转换时如何进行类型检查和匹配 指针有两类:空指针和void指针。空指针为NULL,void指针可指向任何变量 指针初始化四种方式:1、使用NULL指针进行初始化;2、使用类型匹配的对象的地址;3、另一个对象之后...

2019-07-20 12:49:54 308

原创 解决mysql出现ERROR 1064 (42000)

shell中加入登录mysql的语句后,执行报错,如下ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'exit...

2019-07-19 16:17:48 43586 4

原创 lua --函数 和运算符

函数定义:optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)function_bodyreturn result_params_comma_separatedendoptional_function_scope表示全局还是局部 默认...

2019-07-18 13:59:32 67

原创 lua-数组和迭代器

数组包括一维数组和多维数组一维数组:线性表结构,索引为整数,默认从1开始多维数组:arr[] arry[][]迭代器:用来遍历元素,支持指针类型的结构泛型for迭代器:保存三个值:迭代函数,状态常亮,控制变量提供了集合key/value对,如for k, v in pairs(t) do print(k, v)end...

2019-07-18 13:58:46 194

原创 c++ 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》所感--关于变量的类型与引用

最近在看陈黎娟的书《C、C++实践进阶之道,写给程序员的编程书》,其中第十一章讲的是变量和类型,现做笔记如下:数据存储区域分只读数据区(存储常量和恒值,正常情况下不做修改)、全局/静态存储区(全局变量和静态变量)、自由存储区(CRT即c运行时库通过malloc、free函数管理的内存)、栈区(编译器自动分配和回收,存储函数的入参和局部变量)、堆区(new和delete负责的区域) 计算机存储...

2019-07-18 13:57:45 389

空空如也

空空如也

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

TA关注的人

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