c++
胆识与智慧
在探索中成长
展开
-
机器学习 K-means 聚类算法 C++
笔记:尚未解决的问题 : 1. 只支持二维,而不支持三维或更高,需要模板元 2. 尚未实现如何删除极端点, 即预处理 3. 尚未可视化编译环境 Ubuntu gcc 5.4 编译选项 g++ -std=c++14#include <iostream>#include <functional>#include <fstre...原创 2018-10-21 16:11:06 · 493 阅读 · 0 评论 -
C++ 学习笔记(20) Template Method Pattern
Tamplate Method Pattern 模板方法模式:针对一连串有固定顺序的操作,把共有部分集中到基类中,不同部分分散到不同子类中去实现。C++ 对此还有一种特殊的设计 NVI 。 设计出发点:(1)提高代码复用性, 不同派生类的共同部分集中在基类中(2)基类通过对派生类的具体实现来拓展不同的功能。 生活中的例子:(1)炒菜,炒不同的菜,会有相...原创 2018-09-18 11:13:09 · 323 阅读 · 0 评论 -
C++ 学习笔记(19)CRTP
CRTP奇异递归模板(curiously recurring template pattern)样式如下:template<typename T>class Base { // ... friend T;} ;class Derived : public Base<Derived> { // ...} ;特点(1)派生类继承自模板基类(2)...原创 2018-09-17 11:06:18 · 398 阅读 · 0 评论 -
C++ 学习记录(18) NVI
NVInon-virtual interfaces(NVI),非虚拟接口,私有虚函数。令客户通过 public non-virtual 成员函数间接调用 private virtual 函数,是 Template mothod 设计模式的一种独特表现形式。这个 non-virtual 虚函数称为 virtual 函数的外覆器。(摘自《Effective C++》)简单示例:#...原创 2018-09-17 00:11:33 · 851 阅读 · 0 评论 -
C++ 学习笔记(17) pimpl
pimpl对象内含一个指针,指针指向另一个对象,另一个对象常常含有真正的数据。典型例子就是智能指针。基本形式:class other {} ;class Object {public: // ...private: other *ptr;} ;其中, ptr 常是 std::shared_ptr<other> ptr, 遵循 RAII 思想;优点:...原创 2018-09-16 18:58:21 · 277 阅读 · 0 评论 -
C++ 学习笔记(16)代理模式
代理模式的几种应用实例:1. 远程代理为远程程序在本地建立局部代理,可以隐藏外部资源存在于不同地址空间的事实,例如建立 agent 代理类处理 Socket 的数据发送与接收控制。生活中的典型例子还有有游戏代理服务器(加速器,远端计算机具有更优秀的计算能力和处理速度,加快响应和数据交互)。2. 虚代理延迟大型对象的构造。一开始只建立代理,一直到真正需要大型对象的时候才创建它,类似于...原创 2018-09-16 16:59:02 · 210 阅读 · 0 评论 -
C++ -学习笔记(15)SFINAE 匹配失败并不是错误
SFINAE 意为“匹配失败并不是错误”。常用于编译期间,模板参数类型的判断和查找——会遍历查找所有可能匹配的参数类型,如果找不到,就编译失败。C++11 中的 type traits 库中大量运用了 SFINAE。例如 is_class, is_pointer, is_member_function_pointer, is_const 等。对类型的 SFINAE 主要通过在类内部定义的 ...原创 2018-08-13 12:15:03 · 1433 阅读 · 0 评论 -
Loki 库学习(1)ScopeGuard
ScopeGuard 主要分两种情况:1. 调用非成员函数2. 调用成员函数含一个参数,非成员函数 的 ScopeGuard 模板:#include <bits/stdc++.h>#define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; ++i )#define dew( i , j , n )...原创 2018-08-13 07:43:23 · 469 阅读 · 0 评论 -
C++ 学习笔记(14)RAII 资源管理型模板化
对比 C++ RAII 泛化,进一步把资源封装在 RAII 中,向外提供接口尚不完善,仅作记录用#include <bits/stdc++.h>#define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; ++i )#define dew( i , j , n ) for ( int i = int(n-1...原创 2018-08-13 07:40:10 · 163 阅读 · 0 评论 -
C++ main函数中参数argc和argv含义及用法
转载自 :https://blog.csdn.net/dcrmg/article/details/51987413argc 是 argument count的缩写,表示传入main函数的参数个数;argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的ma...转载 2018-08-15 12:50:30 · 185 阅读 · 0 评论 -
C++ 学习笔记(21)Adaptor Pattern
Adaptor Pattern适配器模式,把一个类的接口改成希望的接口。考虑一个这样的类 Invoker, 缺少 method_2 方法,希望能想办法调用这个函数class Invoker {} ;恰好,另一个类 Adaptee 拥有 method_2 方法class Adaptee {public: void mothod_2() {}} ;目标是达到 Inv...原创 2018-09-18 20:25:51 · 271 阅读 · 0 评论 -
C++ 学习笔记(22) Builder Pattern
Builder Pattern建造者模式。考虑生活中的常见场景——餐厅订餐。该餐厅决定提供 N 中套餐 (setMenu 类描述),主要描述如下:namespace Restaurant { // 产品类, 此景中为 套餐(set menu) class setMenu { private: std::vector<std::string> mealOrder...原创 2018-09-19 00:14:31 · 329 阅读 · 0 评论 -
机器学习 回归树算法 C++
算法很简单.x 一维时的 C++ 实现如下(来自<统计学习方法> 第五章习题 5.2>#include <iostream>#include <functional>#include <memory>#include <fstream>#include <cmath>#include <stri原创 2018-10-25 13:43:41 · 627 阅读 · 0 评论 -
机器学习 决策树 ID3 算法 C++ 实现
最近学习了 QT 下如何做一个 QQ, 以及学的课程(机器学习,机器智能,模式识别),愈发感到了数学的重要性.在偏工程和偏算法两者之间抉择......今天,用 C++ 实现了决策树中的 ID3 算法.快一年不写递归了,这次还是复习了不少东西.代码如下:希望日后有时间写个总结,最近一个月学习了不少 C++ 的东西,全放在 github了#include <iostream>...原创 2018-10-20 00:14:50 · 1607 阅读 · 0 评论 -
C++ 学习笔记(28)C++ thread_pool
代码来自网络。只做私人记录,参考用#include <iostream>#include <vector>#include <queue>#include <string>#include <functional>#include <chrono>// thread#include <thread&g转载 2018-10-03 21:44:28 · 559 阅读 · 0 评论 -
C++ 学习笔记(27)Flyweight Pattern
Flyweight Pattern享元模式生活中的实例:(1)Word 等文档编辑器中,会出现很多的重复字母,例如“的”,“I”, "you"等,如果出现了 1000 次,就需要生成 1000 个对象(2)LOL 等近亲游戏中,小兵这一角色,数量极多,但它们其实有很多的共同点,不必生成那么多对象(3)围棋中,黑白棋子除了位置不一样,其他特征都是一样的,如果可以共享,就只需要两个实际存储的对...原创 2018-09-25 20:49:59 · 186 阅读 · 0 评论 -
C++ 学习笔记(25)Composite Pattern
Composite Pattern组合模式考虑一个系统,存在层次管理关系,例如公司内董事长之下,有多个经理,每个经理之下都由若干个部门,每个部分都若干个员工,如果采用面向对象的思想来设计这样一个树状的系统?建立统一基类对象:Component分类:内节点(枝干),外节点(叶子)特点:(1)内节点可以有孩子,外节点不可以有孩子;(2)内节点的孩子可以是内节点,也可以是孩子区别...原创 2018-09-20 11:39:14 · 212 阅读 · 0 评论 -
C++ 学习笔记(24)Facade Pattern
Facade Pattern 外观模式生活中的例子:(1)通过总开关,接入和切断电源(2)网站导航主要思想:定义一个外观类(外覆器),为子系统的一组接口提供统一的接口。在这些子系统和使用子系统的客户之间建立一层“缓冲层”,这个缓冲层接收客户的访问请求,然后将任务分配到诸子系统中。外观模式之前:class Com_1 { public: void run(); } ;cla...原创 2018-09-20 10:08:28 · 145 阅读 · 0 评论 -
C++ 学习笔记(26)Decorator Pattern
Decorator Pattern装饰者模式假设现在要对一个已有的类进行功能拓展,思路可以选用继承。但是如果要拓展的功能比较多,而且功能之间可以随意搭配,例如两种主材料 A, B, C, 可以搭配的材料有 X, Y, Z ,如果继续采用继承,就大致如下:// -----------------------------------------class Meterial {} ;...原创 2018-09-25 17:23:09 · 236 阅读 · 0 评论 -
C++ 学习笔记(23)Prototype Pattern
Prototype Pattern原型模式好博客 原型模式很简单,关键就是通过基类指针调用派生类的 copy constructor#include <iostream>#include <memory>#include <string>class Base {public: virtual ~Base() = default; v...原创 2018-09-19 10:35:21 · 176 阅读 · 0 评论 -
深入 C++ 的 new(转载)
转载自:https://blog.csdn.net/songthin/article/details/1703966“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正...转载 2018-08-15 12:41:40 · 11685 阅读 · 4 评论 -
C++ 学习笔记(13)RAII 模板化 和 ScopeFuard 模板化
巧妙运用 std::function<> 和 lambda 表达式,做到泛化PS: 手动清理在异常安全和资源安全方面的缺点:手动调的一个坏处是,如果在资源申请和释放之间发生了异常,那么释放将不会发生,此外,手动释放需要在函数的所有出口处都去调释放函数,万一某天有人修改了代码,加了一处return,而在return之前忘了调释放函数,资源就泄露了。RAII 模板#inclu...原创 2018-08-12 13:09:02 · 266 阅读 · 0 评论 -
设计模式(2) 工厂模式 ( 一 ) 学生成绩管理系统设计
最近在做课程设计——学生成绩管理系统角色有:老师,学生,课程老师,学生,课程都继承同一个接口 Entity我采用工厂模式,一个接口工厂,三种不同的工厂,每种工厂分别产老师,学生和课程通过工厂把产生的不同种类的 Entity 收集起来,由接口的工厂统一释放内存。以下是程序分块:Entity 实体定义:class Entity {protected: int NO ;public: strin...原创 2018-05-11 01:19:56 · 1708 阅读 · 0 评论 -
C++ 学习笔记 (8) 初识 atexit 函数
atexit 函数 称为终止处理程序注册程序,注册完成以后,当函数终止是exit()函数, 会主动的调用前面注册的各个函数 特点 调用 exit 函数时,会主动调用被注册的函数,执行清理工作 发生在 main 函数结束之后 函数参数是函数的地址 先注册的函数后实现,类似于栈 简单测试:#include &lt;bits/stdc++...原创 2018-05-10 19:11:46 · 484 阅读 · 0 评论 -
C++ 学习笔记 (4) 拷贝构造函数
#include <bits/stdc++.h>using namespace std ;class Student {public: int NO ; string name ; explicit Student ( const int _NO , const string _name ) : NO ( _NO ) , name ( _name ) { cou...原创 2018-04-22 09:14:46 · 282 阅读 · 0 评论 -
计算机网络实验 选择重传协议 Code 记录
计算机网络滑动窗口协议的模拟(仅作记录)环境:Microsoft Visual C++ 6.0参考:《计算机网络》第五版,清华大学出版社帧格式定义 : /* FRAME kind *//* DATA Frame +=========+========+========+===============+========+ | KIND(1) | S...原创 2018-08-01 17:38:27 · 1080 阅读 · 0 评论 -
设计模式 学习笔记(1) 单例模式之饿汉式
单例模式单例模式,就是指一个类有且仅有一个对象实例。例如做一个学生成绩管理系统,我定义了一个“系统类”,用于存储数据,类似于“数据库”的功能。这个系统类当然只能有一个对象实例了;如果有多个实例,就会导致数据不同步。1. 饿汉式饿汉式,简单来讲,就是预先建立一个对象,设为 null ( Java中不可以这么写, C++中可以 ),不管什么时候需要用这个类,就返回这个唯一的对象引用或者...原创 2018-04-30 15:03:33 · 270 阅读 · 0 评论 -
C++ 学习笔记(3) const_cast
const_castC++的四种类型转换关键字之一, const_cast , static_cast , dynamic_cast, reinterpret_cast 。可以去除一个 const 变量的 const 属性。很容易理解错的一个例子:#include using namespace std ;int main () { const int data = 100原创 2018-03-30 21:17:14 · 2129 阅读 · 0 评论 -
C++ 学习笔记(2) 虚函数的使用 virtual
虚函数,是为了实现C++运行时的多态,而产生的。还有编译时的动态,那是重载实现的。特点1. 通过虚函数机制,子类可以重写基类的虚函数,同名的函数,在不同的子类中有多重实现。2. 基类可以通过指针,引用的方式,动态绑定子类,然后调用子类重写的虚函数(不是重写的函数不可以调用)。3. 基类中含有一个vtable 指针,指向一张表 —— 虚函数表,简称 “虚表” 。每个含有虚函数的类中都保存着一个指向虚...原创 2018-03-23 20:26:46 · 462 阅读 · 0 评论 -
C++ 学习笔记(1) 虚函数和析构函数
当通过基类(父类)的指针,指向多个子类,达到多态时,父类指针可以使用子类的成员变量和成员函数,做到“一个接口,多种实现”C++的多态,可以理解为,用一个父类 ( 基类 ) 指针来操控多种子类,倘若这些子类分别用指针来操控,就很容易乱,例如有 100000 个子类,至少需要 100000个指针来操控(仅限于指针操作,实例另外),指针很容易出错,尤其是在析构的时候,要记得释放内存。但多态可以做到一个指...原创 2018-03-23 13:18:40 · 189 阅读 · 0 评论 -
功能简单的优先级队列 堆实现 SCU 3369 SCU 3365
最近写 Prim 和 Disjkstra , 顺便复习一下堆和优先级队列的知识 :#include using namespace std ;#define Init_Data 0 // 设置初始数据typedef int Data_type ; // 数据类型, 在本程序只是单一类型class My_Priority_queue{// 优先级队列默认为小顶堆private原创 2018-02-06 23:28:53 · 218 阅读 · 0 评论 -
设计模式(2) 抽象工厂(一) 学生成绩管理系统设计
续上篇 工厂模式(一) 学生成绩管理设计一个实体"根类" Entity , 派生出三种类——老师,学生,课程一个接口工厂,派生出三种工厂,分别 Create 老师,学生,课程可以考虑,不同学院之间的老师,学生,课程是不同的,例如计算机学院和经济管理学院的教师(假设无重叠),学生,课程(课程大多是不同的)。现在,我想要产生老师的工厂,可以产生不同学院的老师,例如——这个特制工厂,可以...原创 2018-08-01 17:37:21 · 509 阅读 · 0 评论 -
设计模式(2) 工厂模式 ( 二 ) 学生成绩管理系统设计
续上篇 工厂模式 ( 一 ) 学生成绩管理系统设计 一个实体”根类” Entity , 派生出三种类——老师,学生,课程 一个接口工厂,派生出三种工厂,分别 Create 老师,学生,课程 挂一个尚未解决问题的设计 我的想法是,将工厂类和 Entity 实体类都继承自一个“单根类”,Object ——就类似于 Java 的 Object, 这样一来就会很方便。利...原创 2018-05-11 21:07:31 · 708 阅读 · 1 评论 -
C++ 学习笔记(12)模拟 std::ref
#include <bits/stdc++.h>#define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; ++i )#define dew( i , j , n ) for ( int i = int(n-1) ; i > int(j) ; --i )#define _PATH __FILE__ , _...原创 2018-08-12 10:15:47 · 213 阅读 · 0 评论 -
C++ 学习笔记(11) RAII 工厂简易实现
参考博客:RAII 工厂#include <bits/stdc++.h>#define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; ++i )#define dew( i , j , n ) for ( int i = int(n-1) ; i > int(j) ; --i )#define _PAT...原创 2018-08-11 17:34:45 · 250 阅读 · 0 评论 -
C++ 学习笔记(10) 简易版 RAII
利用局部对象离开作用域,自动调用析构函数。类似应用:lock_guard<> ,及时加解锁,防止死锁。学习例子:#include <bits/stdc++.h>#define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; ++i )#define dew( i , j , n ) for (...原创 2018-08-11 12:45:04 · 270 阅读 · 0 评论 -
C++ 学习笔记(9) RAII 在文件中的简单应用
出发点:及时释放文件资源例子:ofstream 文件输出流 和 RAII 的结合#include <bits/stdc++.h>#define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; ++i )#define dew( i , j , n ) for ( int i = int(n-1) ; i &g...原创 2018-08-11 12:22:42 · 249 阅读 · 0 评论 -
设计模式 学习笔记(1) 单例模式之懒汉式
**懒汉式构造单例类** 懒汉式,指的就是需要时再构造(延迟构造),在效率上会优于饿汉式,因为饿汉式在进入 main 之前就要构造,懒汉式不用。基本特点是:线程不安全基本模板(加锁):#include <bits/stdc++.h>#define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; +...原创 2018-08-02 11:33:23 · 183 阅读 · 0 评论 -
C++ 学习笔记 (6) 最好不要重载全局 operator new 和 operator delete
自从尝试重载 new 操作符,也算是见了眼界——原来 new 是不可以重载的。一般使用的分配内存的 new 就是一个操作符,不可改变,不可重载可以重载的是 operator new 和 placement new ( placement new 重载了 operator new )std::string *One = new std::string ( "YHL" ) ; new 分三原创 2018-05-08 19:30:17 · 637 阅读 · 1 评论 -
C++ 浅拷贝这个坑
2018.5.13 在测试策略模式的多对象时,我用到了 vector 的 push_back 以及 emplace_back 以及 list 的 push_back 和 emplace_back 没想到测试的主要时间花费在了调试程序上!Bug 程序如下#include <iostream>#include <vector>#include &l...原创 2018-05-13 23:50:32 · 809 阅读 · 0 评论