自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 wsl利用netsh端口转发实现http代理

这里注意两个问题,遇到过netsh命令正常执行后,但是端口没有被监听。上面命令执行完成后,检查命令是否执行成功。这样就可以实现wsl上的http代理了。检查端口是否正常监听。

2024-01-21 17:18:58 745

原创 git常用操作

【代码】git常用操作。

2023-08-24 16:47:17 109

原创 常用的shell语法

awk 可以将文件拆分成功若干行, 根据指定的分隔符, 再将每一行拆分成若干列, 默认按照空格或tab进行拆分基本语法格式§ awk 参数 '条件{处理动作}' 操作的文件或数据print num}§ awk 参数 ' /正则表达式 {处理动作 } ' 操作的文件或数据指定分隔符的参数: -F-F分隔符-F:如何使用变量取出某一列?$0 - 代表当前行$1 - 第一列$2 - 第二列$3 …以冒号分隔 如果第三列大于500 就输出第三列值。

2023-08-05 14:45:31 190

原创 工作中笔记

笔记

2023-03-15 15:14:26 62

原创 cmake入门三 模块的使用和自定义模块

cmake 模块使用自定义find_package 模块

2023-03-13 15:47:58 448

原创 cmake 入门四 常用变量和指令

cmake 常用变量和指令

2023-02-24 18:04:50 1327

原创 cmake 入门二 库的编译,安装与使用

cmake 库的编译与安装

2023-02-24 11:39:29 440

原创 cmake 入门一 多目录编译与安装

cmake 外部编译demo

2023-02-23 17:39:39 709

原创 libcurl 多线程使用

libcurl 多线程

2023-02-20 10:54:29 843

原创 Makefile 整理

Makefile 详解

2023-02-07 20:19:44 269

原创 各种排序算法整理及c++ 实现

各种排序算法整理及c++实现

2023-02-03 15:58:53 69

原创 oj blink

oj blink

2022-10-17 17:15:35 120

原创 oj big box

OJ big box

2022-10-17 17:10:48 117

原创 oj city road

oj city road

2022-10-17 17:06:16 82

原创 oj phone number

oj phone number

2022-10-17 16:55:26 82

原创 OJ 整数拆分

oj 整数拆分

2022-10-17 16:50:50 123

原创 Expression 数学表达式求值

数学表达式求值

2022-09-15 21:27:20 596

原创 linux 修改用户句柄open files

修改用户句柄时,要注意用户句柄数不能大于系统的句柄数,否则对应的用户登录不上机器

2022-08-10 20:41:33 1221

原创 c++ 单例模式

单例模式单例模式有两种,懒汉和饿汉懒汉:故名思义,不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化。与之对应的是饿汉式单例。(注意,懒汉本身是线程不安全的)饿汉:饿了肯定要饥不择食。所以在单例类定义的时候就进行实例化。(本身就是线程安全的)1 线程安全、内存安全的懒汉式单例 (智能指针,锁)#include <iostream>#include <memory> // shared_ptr#include <mutex> //

2022-02-19 17:38:46 95

原创 c++ 工厂设计模式

1 定义所谓简单工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字,就可以通过工厂对象的相应工厂函数来制造你需要的对象。简单工厂模式的核心是,对于一个父类的多个继承子类,工厂对象的工厂函数根据用户输入,自动new出一个子类对象并返回其父类的指针,这样利用父类的指针执行父类的虚函数,就可以动态绑定子类的重写函数,从而实现多态。2 代码实现#ifndef __SIMPLEFACTORY__H#define __SIMPLEFACTORY__H#include <iostream&

2022-02-19 15:20:36 700

原创 placement new

1什么是placement new?所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可。举例来说:class foo{};foo* pfoo = new foo;pfoo指向的对象的地址你是不能决定的,因为new已经为你做了这些工作。第一步分配内存,第二步调用类的构造函数。而placement new是怎么做的呢,说白了就是把原本new做的两步工作分开来。第一步你自己分配内存,第二步你调用类的构造函数在自己分配的内存

2022-01-26 17:57:44 120

原创 栈结构与应用

栈结构与应用1 顺序栈#ifndef __STACK__#define __STACK__#include <iostream>using namespace std;//#define ElemType char #define ElemType char #define STACK_INIT_SIZE 8#define STACK_INC_SIZE 3class Stack{public: bool Inc(); void InitStack();

2022-01-05 17:02:32 473

原创 valgrind检测内存泄漏

1 valgrind 安装1.1 valgrind安装包获取http://www.valgrind.org/downloads/valgrind-3.14.0.tar.bz21.2 安装tar -jxvf valgrind-3.14.0.tar.bz2cd valgrind-3.14.0./configure --prefix=/home/user1/valgrindmakemake install如果安装的时候采用默认的安装路径,执行configure是可以不加配置–prefix参数具

2021-07-07 17:39:17 762

原创 linxu磁盘分区与挂载

1、磁盘分区分区介绍分区是将一个硬盘驱动器分成若干个逻辑驱动器,把硬盘连续的区块当做一个独立的磁硬使用,磁盘分区可以防止数据丢失:如果系统只有一个分区,那么这个分区损坏,用户将会丢失所的有数据。增加磁盘空间使用效率:可以用不同的区块大小来格式化分区,如果有很多1K的文件,而硬盘分区区块大小为4K,那么每存储一个文件将会浪费3K空间。这时我们需要取这些文件大小的平均值进行区块大小的划分。数据激增到极限不会引起系统挂起:将用户数据和系统数据分开,可以避免用户数据填满整个硬盘,引起的系挂起分区工具fd

2021-02-26 19:31:40 159

原创 boost库scoped_array智能指针实现

1 scoped_array智能指针特点与scoped_ptr不同的是scoped_array智能指针管理new出来的数组空间,同样的是智能指针所管理的空间不能转移,但是可以通过成员方法reset让它去管理新的内存空间。在使用时要注意以下几点1、构造函数接受的指针p必须是new[]的结果,而不能是new表达式的结构2、没有*、->操作符重载(但是可以扩展)3、析构函数使用delete[]释放资源,而不是delete4、提供operator[]操作符重载,可以向普通数组一样用下标访问元素2

2020-12-26 18:19:15 187 2

原创 boost版scoped_ptr智能指针实现

1 scoped_ptr智能指针特点与auto_ptr智能指针不同的是,scoped_ptr智能指针所管理的空间不能转移,即不能通过拷贝或赋值将原先管理的空间交由新的智能指针管理,因此在实现时要将拷贝构造和赋值声明为私有。另外,scoped_ptr智能指针所管理的空间虽然不能转移,但是可以通过成员方法reset让它去管理新的内存空间,这时要注意原来所管理空间的释放,因为不能转移出去其他的智能指针管理,所以reset的实现一定要保证原来空间的释放。2 scoped_ptr智能指针实现#define _C

2020-12-26 17:31:07 108

原创 vs版本auto_ptr智能指针实现

1 vs版本auto_ptr智能指针实现vs版本auto_ptr智能指针解决了vc版的缺点,即智能指针通过拷贝或赋值转让空间后,不能再通过原来的智能指针去访问失去管理权的空间,在空间管理权所属方面与vc版不同的是,vs版的实现是通过使成员指针__Ptr为空表示失去空间管理权,而vc版的实现是通过成员_Owns为假时表示失去空间管理权。#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>#inc

2020-12-26 15:30:00 308

原创 vc版auto_ptr智能指针实现

1 vc版auto_ptr智能指针实现#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>//#include<memory>#include <vld.h>using namespace std;template<class _Ty>class AutoPtr{public: // 默认构造函数,_Ptr为空时,没有任何空间的管理权 Aut

2020-12-26 00:01:41 115

原创 c++ 写实拷贝实现demo

#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>#include <vld.h> // 内存泄漏检测using namespace std;class String;ostream& operator<<(ostream &out, const String &s);// 引用计数类,通过深拷贝来构造// 同时提供Increase

2020-12-22 22:27:15 143

原创 多态实现通用链表

链表节点的数据域类型不再为具体的数据类型,而是通过一个基类指针引入,达到不借助模板而是通过多态实现通用链表#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>using namespace std;class Object{public: Object(){} virtual ~Object(){} virtual void Print()const = 0; virtual b

2020-12-21 21:19:59 353

原创 c++ const对象与const函数

本文主要讨论c++中***const修饰的常对象与没有const修饰的普通对象中的成员函数返回值的常性问题***,其中成员函数包括有const修饰和没有const修饰(因为const在成员函数中能形成重载所以能并存),成员变量包括普通变量,指针变量与对象1 类中的成员变量为普通变量#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>using namespace std;class Bas

2020-12-20 21:44:19 268

原创 c++类型转换

1 静态转换(static_cast)static_cast 全部用于明确定义达到转换,包括编译器允许我们所做的不用强制转换的安全变换和不太安全但清楚定义的变换。1.1 用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换1.进行上行转换(把派生类的指针或引用转换成基类表示)是安全的2.进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。这里的不安全是指进行向下转换时,转换后所得的子类指针是一个非空值,这就可能造成原本一个基类指针在静态转换成派生类指

2020-12-20 01:35:53 281 1

原创 c++ 文件读写

1 C++的基本流类体系整个流类体系是一个派生类体系。按ANSI C++标准,类ios是抽象类,它的析构函数是虚函数,它的构造函数为保护的,作为所有基本流类的基类。ios提供了对流进行格式化输入输出和错误处理的成员函数。所有派生都是公有派生。istream类提供完成提取(输入)操作的成员函数,而ostream类提供完成插入(输出)操作的成员函数。iostream类是前两者的组合。streambuf是一个独立的类,只是ios有一个保护访问限制的指针指向它。streambuf的作用是管理一个流的缓冲区

2020-12-18 23:22:12 669 1

原创 c++多态的实现原理与图解

1 实现多态的三步骤1、 有继承关系的类2、父类有虚函数,子类重写父类的虚函数3、子类的指针或应用赋值给父类2 虚函数注意点派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是重载,而不是虚函数。但是基类中虚函数的返回值返回基类指针,派生类中对应的虚函数返回值返回派生类指针是允许的,这是一个例外。只有类的成员函数才能说明为虚函数。这是因为虚函数仅适用于有继承关系的类对象。即全局函数不能说明为虚函数静态成员函数,是所有同一类对象共有,不受限于某个对象

2020-12-17 23:25:25 773

原创 c++继承构造函数、析构函数、成员函数的调用

1 派生类的构造函数、析构函数的调用1.1 派生类构造函数各部分的执行次序为:1.调用基类构造函数,按它们在派生类定义的先后顺序,顺序调用。2.调用成员对象的构造函数,按它们在类定义中声明的先后顺序,顺序调用。3.派生类的构造函数体中的操作。4.析构函数的调用顺序与构造函数相反,与构造函数的调用对应的是一个出栈的过程1.2 若派生类中有虚继承,则先调用虚基类的构造函数在派生类对象的创建中,首先是虚基类的构造函数并按它们声明的顺序构造。第二批是非虚基类的构造函数按它们声明的顺序调用。第三批是成员

2020-12-17 01:05:15 688

原创 c++类的继承访问属性

1 定义形式由基类派生出派生类的定义的一般形式为class 派生类名:访问限定符 基类名1,访问限定符 基类名2, … 访问限定符 基类名n若只继承自一个基类,则为单继承,否则为多继承2 编写步骤1、吸收基类的成员 :不论是数据成员,还是函数成员,除构造函数与析构函数外全盘接收 ,这与继承属性无关,继承属性不管是公有、私有、保护,子类都会吸收父类除构造函数与析构函数外的所有成员,数据成员会占有子类空间的大小,只是不同的继承属性在子类内部对父类成员会有不同的访问权限2、改造基类成员 :声明一

2020-12-16 23:04:13 757 1

原创 c++ new与delete

1 new与delete的使用在C++中,申请和释放堆中分配的存贮空间,分别使用new和delete的两个运算符来完成,其使用的格式如下:对于单个对象:指针变量名=new 类型名(初始化式)int *p = new int(10);delete p;对于数组进行动态分配的格式:指针变量名=new 类型名[下标表达式];int *p = new int[10]delete [] p;注意点:1、对于多维数组的的delete也只需加一个[],[]中无需填写数组的大小2、由new创建对象

2020-12-15 22:39:43 147

原创 函数模板和类模板

模板为了代码重用,代码就必须是通用的;通用的代码就必须不受数据类型的限制。那么我们可以把数据类型改为一个设计参数。这种类型的程序设计称为参数化(parameterize) 程序设计。软件模块由模板(template) 构造。包括函数模板(function template)和类模板(class template)。1 函数模板函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计。函数模板定义如下:template<模板参数表>返回类型 函数名(形式参数表){

2020-12-13 22:07:33 676

原创 c++类的静态成员

静态成员由关键字static修饰说明的类成员,成为静态类成员(static class member)。虽然使用static修饰说明,但与函数中的静态变量有明显差异。类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中。类的静态成员分为静态成员变量和静态成员函数。1 静态成员变量在类定义中,用关键字static修饰的数据成员为静态数据成员。该类产生的所有对象共享系统为静态成员分配的一个存储空间,而这个存储空间是在编译时分配的,在定义对象时不再为静态成员分配空间,即静态成员的大

2020-12-13 19:08:26 702

原创 运算符重载与友元函数

运算符重载1 运算符重载函数的定义运算符的重载实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该重载的运算符时调用此函数。这个函数叫做运算符重载函数,通常为类的成员函数。定义运算符重载函数的一般格式:返回值类型 类名::operator重载的运算符(参数表){……}operator是关键字,它与重载的运算符一起构成函数名。因函数名的特殊性,C++编译器可以将这类函数识别出来。2 运算符重载函数的参数2.1 运算符重载函数为类的成员函数当用类的成员函数实现运算符的重载时

2020-12-13 17:11:14 1960 1

空空如也

空空如也

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

TA关注的人

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