- 博客(35)
- 收藏
- 关注
原创 如何撤销git commit
如果commit后面的注释写错了,可以运行 git commit --amend,进入vim编辑模式,修改完保存即可。执行此命令,本次的(这里HEAD~1)commit会被撤销,commit所对应的修改会撤回到暂存区当中,执行此命令,本次的commit会被撤销,commit所对应的修改会撤回到修改区(工作区)当中,也可以写成HEAD~1,如果进行两次的commit,想要都撤回,可以使用HEAD~2。执行此命令,本次的commit会被撤销,commit所对应的修改会撤回到原始状态,,比较安全,修改不会丢失。
2023-06-27 09:25:57 4122
原创 AbstactFactory 模式(抽象工厂模式)
1、结构图2、代码实现#pragma once#include <iostream>#include <memory>// 抽象产品Aclass CAbstactProductA {public: virtual ~CAbstactProductA() {} virtual void mvOperation() = 0;};// 具体产品A1class CConcreteProductA1 : public CAbstactProductA {p
2022-05-04 22:39:27 199
原创 螺旋三角形
题目:请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。例如:当n=3时,输出:1 2 36 45当n=4时,输出:1 2 3 49 10 58 67当n=5时,输出:1 2 3 4 512 13 14 611 15 710 89要求:程序运行时,要求用户输入整数n(3~20)程序输出:方阵的上三角部分。要求格式:每个数据宽度为4,右对齐。解题思路:1、先水平向右打印值
2021-06-08 00:27:22 769
原创 螺旋队列之算法分析
求解螺旋的队列的步骤如下:1、求坐标(x, y)所在的圈数n; int n = abs(x) > abs(y) ? abs(x) : abs(y);2、求前n-1圈的总个数;如下图所示的红色数字可看出规律:第0圈:12第1圈:32第2圈:52第3圈:72第n-1圈:(2 * (n - 1) + 1)2int value = pow(2 * n - 1, 2);3、求坐标(x, y)在第n圈的位置;我们将坐标分为上、下、左、右四个位置:3.1、坐标在上:如下图所示:v
2021-06-06 00:15:49 289
原创 函数指针
函数名、函数指针、函数名取地址: 函数名:函数首地址,即函数指针常量, 函数调用:myFunc(11);(*myFunc)(11); 函数指针:函数指针变量void(*pFunc1)(int) = myFunc;typedef void(*FuncPtrType)(int);FuncPtrType pFunc2 = myFunc; 函数名取地址:函数指针的初始化表达式中的函数名前面的&操作符是可选的,因为函数名被使用时总是由编译器把它转换为函数指针。&操作符
2021-04-24 00:01:39 239
原创 深入模板基础
一、参数化声明1、虚成员函数 成员函数模板不能声明为虚函数:因为虚函数调用机制的普遍实现都是使用一个大小固定的表,每个虚函数都对应表的一个入口,然后成员函数模板的的实例化个数,要等到整个程序都翻译完毕才能确定,这个和表的固定大小发生冲突。(注:成员函数模板指的时类模板的成员函数是函数模板) template <typename T1> class MyClass { public: // 成员函数 virtual void mvSetNum1(const T1& t
2020-11-25 23:48:32 103
原创 正则表达式的元字符
**正则表达式的元字符**元字符:表示这个字符有特殊含义,代表的不是字符本身1、基本的元字符元字符说明.匹配任意单个字符|逻辑或操作符[]匹配该字符集合中的一个字符[^]排出该字符集合-定义一个范围(例如[a-z])\对下一个字符转义2、量词元字符元字符说明*匹配前一个字符(子表达式)的零次或多次重复*?*的懒惰型版本+匹配前一个字符(子表达式)的一次或多次重复+?+的懒惰型版本
2020-11-17 00:26:26 92
原创 模板基础知识
模板基础知识实例化:用具体类型替代模板参数的过程。模板被编译两次:1、实例化之前,先检查模板代码本身,查看语法是否正确;2、在实例化期间,检查模板代码,查看是否所有的调用都有效。一、函数模板1、声明:template <typename T>int max(const T& a, const T& b) { return (a < b) ? a : b;}2、调用:int a = 10;int b = 100;max(a, b);3、非模
2020-11-16 00:07:59 183
原创 数据结构和算法--顺序循环队列(C++实现)
把队列这种头尾相接的顺序存储结构称为循环队列front:指向对头元素的位置rear:指向队尾元素的下一个位置对列满的条件:(real + 1) % QueueSize == front当对满时,数组中还有一个空闲的元素。队列长度:(rear - front + QueueSize) % QueueSize#include <iostream>const unsigned MAX_SIZE = 10;template<typename T>class CycleQ
2020-07-12 23:16:26 358
原创 数据结构和算法--链队列(C++实现)
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,简称链队列。#include <iostream>template<typename T>struct queue_node{ queue_node(const T& d) : next(nullptr), data(d) {} queue_node* next; T data;};template<typename T>class LinkQueue{public:
2020-07-12 16:39:04 112
原创 数据结构和算法--链栈(C++实现)
定义:栈是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。#include <iostream>template<typename T>struct stack_node{ stack_node(const T& d) : next(nullptr), data(d) {} stack
2020-07-12 00:29:51 288
原创 数据结构和算法--双向链表(C++实现)
#include <iostream>template<typename T>struct list_node{ list_node() : next(nullptr), prev(nullptr) {} list_node(const T& d) : next(nullptr), prev(nullptr), data(d) {} list_node* next; list_node* prev; T data;};template<typen
2020-07-11 22:50:49 172
原创 数据结构和算法--单链表(C++实现)
#include <iostream>template<typename T>struct list_node{ list_node() : next(nullptr) {} list_node(const T& d) : next(nullptr), data(d) {} list_node* next; T data;};template<typename T>class SingleLinkList{public: Single
2020-07-11 18:44:47 144
原创 C++Primer学习笔记:第14章、重载运算符与类型转换
1、基本概念 1、重载运算符是具有特殊名字的函数:它们的名字由关键字 operator 和其后要定义的运算符号共同组成。和其他函数一样,重载的运算符也包含返回类型、参数列表以及函数体。 2、 如果一个运算符函数是成员函数,则它的第一个(左侧)运算对象绑定到隐式的this指针上,因此,成员运算符函数的(显式)参数数量比运算对象的数量少一个。 注: 如MyClass类重载运算符+为成员函数。 MyClass::MyClass operator+(const MyClass& c1)
2020-07-08 00:11:01 238
原创 解决 error C2374 : g_num : redefinition : multiple initialization
解决 error C2374 : g_num : redefinition : multiple initialization声明类型:1、需要建立存储空间的(如int a;),称为定义性声明,简称定义;2、不需要建立存储空间(如extern int a;),称为引用性声明,简称声明。问题描述:如果在.h文件中定义g_num,多个.cpp文件想共用g_num,因此都包含该.h文件,会造成g_num重复定义。解决方案:g_num在.h里面声明(extern int g_num;),需要在其中一个.c
2020-06-22 22:32:12 1369
原创 C++Primer学习笔记:第15章、面向对象程序设计
C++Primer学习笔记:第13章、拷贝控制1、继承和动态绑定对程序的编写有两方面的影响:我们可以更容易地定义与其他类相似但不完全相同的新类;在使用这些彼此相似的类编写程序时,我们可以在一定程度上忽略掉它们的区别。2、面向对象程序设计的核心思想是数据抽象、继承和动态绑定。通过使用数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。3、在C++语言中,基类将类型相关的函数与派生类不做改变
2020-06-21 23:32:52 262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人