- 博客(23)
- 资源 (7)
- 收藏
- 关注
原创 Bridge
#include<iostream>class DrawAPI{public: virtual void drawCircle(int radiux, int x, int y) = 0;};class RedCircle : public DrawAPI{public: void drawCircle(int radius, int x, int y)override { std::cout << "red circle...
2020-12-12 18:25:46
134
原创 Adapter
#include<iostream>#include<string>class MediaPlayer{public: virtual void play(const std::string& type) = 0;};class AdvancedPlayer{public: virtual void playMP4()const = 0; virtual void playVLC()const = 0;};class MP...
2020-12-10 23:08:41
145
原创 singleton
#include<iostream>#include<string>#include<thread>#include<chrono>using namespace std;class Singleton{private: string m_str; Singleton(const string& s) : m_str(s) { } static Singleton* p_singleton;public:...
2020-12-09 22:38:10
157
原创 模板特化
模板特化只能在同一命名空间中进行,可以特化类模板,也可以特化函数模板。但函数模板只能全特化,类模板可以全特化,也可以偏特化。全特化//类模板全特化template<typename T, typename U>class Base{public: T t; U u; void show()const { std::cout << t << std::endl; std::cout <&l
2020-12-09 15:49:33
311
原创 Prototype
#include<iostream>#include<string>#include<unordered_map>using namespace std;class Shape{protected: string m_name;public: Shape(const string& s="shape") : m_name(s){ } virtual ~Shape() { } virtual Shape* clon...
2020-12-09 00:02:27
105
原创 Builder
#include<iostream>#include<string>#include<vector>using namespace std;class ProductA{public: vector<string> contents; void show()const { for(const auto& each : contents){ cout << each...
2020-12-07 21:27:55
102
原创 Abstract Factory Method
#include<iostream>#include<string>using namespace std;class AbstractProductA{public: virtual ~AbstractProductA(){ } virtual string methodA()const = 0;};class ProductA1 : public AbstractProductA{public: string methodA()co...
2020-12-06 19:14:17
106
原创 Factory Method
#include<iostream>#include<string>using std::string;using std::endl;using std::cout;class Product{public: virtual string operation()const = 0; virtual ~Product(){ }};class ConcreteProductA : public Product{public: ...
2020-12-05 18:24:22
100
原创 Creational patterns
Creational patterns就是多种创建不同对象的方法,大大提高了代码的复用和灵活性。常见的创建类模式有以下几种:Factory Method Abstract Factory Builder Prototype Singleton
2020-12-05 17:07:07
158
原创 设计模式
Design patternsare typical solutions to commonly occurring problems in software design. They are like pre-made blueprints that you can customize to solve a recurring design problem in your code.这里是一个学习设计模式的很好的网站。总的来说,设计模式分为以下三类: Creational patte...
2020-12-05 17:00:17
98
原创 linux编译静态库和共享库
假如有两个向量操作的C文件addvec.c和multvec.c。若要把他们编译成静态库libvector.a,首先要将两个C文件经预处理,编译,汇编得到可重定位目标文件(.o),然后要使用AR工具将其编译为静态库(.a)。gcc -c addvec.c multvec.c //得到.o文件ar rcs libvector.a addvec.o multvec.o //得到.a文件...
2019-12-30 13:16:56
217
原创 C语言返回字符指针的几种办法
用malloc在堆上分配空间,并返回。要注意的是,在调用函数中要free掉分配的空间。 将返回的字符指针作为函数形参传入,使用后返回该指针。 返回全局变量的字符指针。 在函数中使用static变量,放在bss段。...
2019-12-28 22:20:26
1354
原创 开源库“uthash.h”使用方法记录
"uthash.h"是一个非常好用的C语言关于哈希表的开源库,现将此使用方法做一记录。“uthash.h”直接从GitHub上Clone就行了。使用时#include "uthash.h"即可。下面重点说一下相关函数使用方法。首先需要一个结构体:struct hash_table{ int key; int value; //any type UT_...
2019-12-23 19:04:25
1629
原创 C++顶层const与底层const
在C++中,顶层const是指const作用于对象本身,可以表示任意对象是常量;而底层const是指指针或引用等复合类型所指的对象是一个常量。指针类型既可以是顶层const,也可以是底层const;而引用只能是底层const。const int a = 1; //顶层constint b = 2;const int c = 3;int *const p1 = &b; ...
2019-05-02 12:10:10
278
原创 C++之引用形参
把函数不会改变的形参定义成普通的引用是一种比较常见的错误,这么做会带给函数调用者一种误导,即函数可以修改形参的值。此外,使用引用而非常量引用也会极大的限制函数所能接受的实参类型。我们不能把const对象,字面值或者需要类型转换的对象传递给普通的引用形参。因此应尽量使用常量引用形参。#include <iostream>#include <string>#inclu...
2019-05-02 11:49:44
7642
原创 Python分片巧用
a = [1,2,3]a[len(a):0] = [4] #相当于a.append(4)a[:0] = [0] #相当于a.insert(0,0)a[::-1] #相当于a.reverse()
2019-04-07 15:00:20
146
原创 Python共享引用和原处修改
在Python中,变量总是一个指向对象的指针,而不是可改变的内存区域的标签:给一个变量赋一个新的值,并不是替换了原始对象,而是让这个变量去引用完全不同的一个对象。实际的效果就是对一个不支持原处修改的变量赋值,仅仅会影响那个被赋值的变量。但对于支持在原处修改的对象,共享引用时需倍加小心,因为对一个变量名的修改会影响其他的变量。如下图:可见,对不可变对象(数字,字符串,元组等)的共享引用,...
2019-04-07 14:21:57
622
原创 Python 中两种方式创建列表的区别
class Student: def __init__(self, value): self.value = value self.next = None假如我们创建了一个类Student,然后需要创建一个元素为Student类的列表,我们有两种方法。但这两种方法所得到结果是不一样的,其中第一个列表中的所有的Student都是同一个对象,其地址是相...
2019-04-07 09:36:12
981
原创 http中get和post两种请求方法的区别
GET参数通过URL传递,POST放在Request body中。 GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。 GET请求在URL中传送的参数是有长度限制的,而POST么有。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求只能进行url编码,...
2019-03-06 20:47:29
189
原创 Python中的staticmethod
Python中有比较常见的三种方法:实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法); 调用:只能由实例对象调用。类方法 定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);...
2019-03-01 19:50:31
1250
原创 Python分解质因数
def func(a): ans = [] while a>1: for i in range(2,a+1): if a%i == 0: ans.append(i) a //= i break return ans
2019-02-21 16:29:13
490
2
原创 C 语言两个浮点数比较大小的办法
浮点数并非真正意义上的实数,只是其在某个范围内的近似。因此两个浮点数比较大小时,不能简单地使用大于小于号进行比较,应该判断连个浮点数差值的绝对值是否近似为0。#include <stdio.h>#include<math.h>#define EPS 1e-7 //判断浮点数是否位于0的一个很小的邻域内[-EPS,EPS]...
2019-01-20 21:56:19
19434
原创 C语言scanf函数%c格式符存在问题的解决办法
在%c前面加一个空格,忽略前面数据输入时存入缓冲区中的回车符,避免被后面的字符作为有效字符读入。 main(){ char c; while(1){ printf("input: "); scanf(" %c",&c); //%c前面加一个空格 printf("%c : %d\n",c,c); }}...
2019-01-20 21:40:52
715
PyQt5制作的机器人动画
2018-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人