c++
Krishna_Lee
这个作者很懒,什么都没留下…
展开
-
Debug C++
用惯了QT,经常使用qDebug()输出一些调试信息,在visual studio中有什么办法也能输出调试信息呢?总结以下三种方法:visual studio新建一个空的c++控制台项目,新建一个main.cpp文件,包含以下头文件就可以用了。//1---------------------------------------------------------------#i原创 2016-02-15 15:13:17 · 484 阅读 · 0 评论 -
c++版 宽窄字符 转换方法
c++的locale不同于c的locale,c++的locale是个对象,这个对象又由许多叫facet对象组成,每个facet对象负责处理字符的某个方面 根据国际化的要求。比如下面这个facet: ctype< charT> 就可以处理宽窄字符转换:#include<locale>#include<string>std::wstring toWstring(std::string str)原创 2017-02-12 16:07:41 · 2533 阅读 · 1 评论 -
c++ command 命令模式
形象生动的讲,就是个苦力模式:一个老板,三个领导,还有一个苦工。如下:#include<iostream>#include<vector>using std::cout;using std::endl;class Leader;class Boss{ std::vector<Leader*> team;public: void addHelper(Leader* leade原创 2017-01-22 14:53:12 · 524 阅读 · 0 评论 -
c++ weak ptr解除指针循环引用。
看着简单,避免眼高手低,还是亲自理解一下:#include<iostream>#include<memory>using namespace std;class Point{public: int value; shared_ptr<Point> next; weak_ptr<Point> weak_Next; Point(int v):value(v){}原创 2017-02-13 10:33:21 · 765 阅读 · 0 评论 -
c++ FlyWeight 设计模式
个人觉得:一个单例模式的工厂,永远只维护一个类的实例,谁要访问实例,工厂就返回这个实例,不会有副本。FlyWeight模式类似,一堆实例工厂,其中,每个实例都是独一无二的,且没有副本(因此隐含了工厂来管理对象的生命周期)。 参考的网络例子太多没注意内存泄漏,本人都作了完善。 如下:#include<iostream>#include<string>#include<vector>usi原创 2017-01-23 11:47:09 · 566 阅读 · 0 评论 -
c++ 责任链 设计模式
可以看作GUI框架处理事件的原型,例如点击按钮事件,button(window),先处理;如果事件没有得到处理,再上溯给父panel(window)去处理;如果事件没有得到处理,再上溯给父frame(window)去处理;如果事件没有得到处理,最后交给APP实例处理。#include<iostream>using std::cout;using std::endl;class Handle{原创 2017-01-23 14:59:25 · 309 阅读 · 0 评论 -
c++ enable shared from this
是一种允许在对象内部,得到(shared_ptr自身)的方法。有几点需要注意:对于: class MyClass :public enable_shared_from_this< MyClass>{……}; 总结: 1,不可以在MyClass的构造函数中使用shared_from_this(),因为父类的弱针指成员还没有被初始化。 2,对象直接在栈上或堆上构建,也是不能使用shared_fr原创 2017-02-13 17:28:43 · 862 阅读 · 0 评论 -
c++插入排序
直接插入排序:#ifdef WIN32#define _CRT_SECURE_NO_WARNINGS#endif // WIN32#include<iostream>using namespace std;int main(){ int a[10] = { 12,88,45,72,3,15,7,66,92,31 }; for (int watch = 1; watch <原创 2017-01-24 09:57:48 · 291 阅读 · 0 评论 -
冒泡排序
一列数字,通过比较互相交换,让最大的值排到最后,需要排序的数组长度减一;递归;#include<iostream>#include<vector>using namespace std;void bSort(int a[], int length){ for (int pos = length-1; pos >0; pos--)//不断减小数组长度; { fo原创 2017-01-24 16:32:16 · 245 阅读 · 0 评论 -
c++ type traits 2
另一种type traits方法:#include<iostream>#include<typeinfo>using namespace std;template<typename T>struct CharTraits{ typedef T value;};template<>struct CharTraits<char>{ typedef char value;}原创 2017-02-14 16:39:42 · 309 阅读 · 0 评论 -
windows-pipe-进程间通信1
稍微研究了一下windows各种进程通信,要求复杂度小、高效率的、双向的、不跨计算机的(不涉及网络的),只专注本地进程通信,总结出2种方式: 第一种:windows named pipe windows pipe可以实现双向通信,一个pipe就能实现,如果涉及阻塞、同步异步、锁…这带来了复杂度提升,因此觉得一个pipe只要专注单向传输就好了,如果要涉及双向传输,使用2个pipe。以下是一种单向传原创 2017-01-29 14:34:18 · 4486 阅读 · 0 评论 -
windows-event-进程间通信2
这是第2种方式,追踪boost/asio源码找到的一种线索,使用事件通知://server.cpp#include <windows.h> #include <iostream> #include <string> using namespace std;int main(){ HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE,原创 2017-01-29 16:08:28 · 3708 阅读 · 0 评论 -
c++单向链表-数据结构
单向链表看着简单,实现起来还是需要很仔细,指向的元素需要想清楚,内存需要能正确释放,代码要讲究可读性,试了一下午,以下是自定义的实现://list.h#ifndef LIST_H_H_#define LIST_H_H_#include<cstdio>#include<cstdlib>#include<cassert>/** 节点中的具体的数据类型 */typedef int DataTyp原创 2017-02-02 20:52:01 · 371 阅读 · 0 评论 -
C++ SFINAE,替代失败不是错误
本文, 引用http://blog.csdn.net/godcupid/article/details/50420925 引用http://blog.csdn.net/freeelinux/article/details/53429009 对以上原作者表示感谢。SFINAE:Substitution Failure Is Not An Error,替代失败不是错误。个人总结: 在调用某个转载 2017-02-12 11:19:17 · 690 阅读 · 0 评论 -
c++ visitor 设计模式
关于访问者模式,语言表达总是太绕,不如一个具体的实现:#include<iostream>#include<string>#include<chrono>#include<vector>using std::cout;using std::endl;//前向声明,访问者class Visitor;//被访问的抽象类,只有一个接口,用来接受访问者class Object{public原创 2017-01-21 19:42:55 · 1403 阅读 · 0 评论 -
c++ Policy-based design
基于Policy和基于traits都是一样的,只是感觉Policy倾向于行为提取,traits倾向于类型提取。好像还有一种名词:Aspect-oriented programming,不过感觉都有相同的意义。举个实例:计算加减乘除,常规方法是定义一个抽像计算的基类,然后派生出各种具体计算类…就不多说了。 下面使用Policy方法,实现一把:#include<iostream>template<t原创 2017-02-10 17:29:42 · 1343 阅读 · 0 评论 -
函数对象-如何保留结果状态
#include<iostream>#include<functional>#include<algorithm>#include<typeinfo>#include<vector>#include<assert.h>using namespace std;class MeanValue{public: MeanValue():m_count(0),m_total(0){}翻译 2016-02-22 14:47:43 · 625 阅读 · 0 评论 -
C++ Trait特性萃取
c++定义了许多默认的Trait可供我们使用,比如is_ingegral,is_class,is_object等等, 今天自己突然想尝试自己实现一个,试了一下,成功了,虽然写的不太好,但还是很有收获:#include<iostream>using namespace std;//第一步:定义这个策略Trait,这个策略实现【char】与【非char】的判断。template<typename原创 2016-03-08 15:48:00 · 4162 阅读 · 0 评论 -
深入分析c++虚函数表
转自http://www.cnblogs.com/dsky/archive/2012/02/07/2340984.html。 自己亲自测试了一下,更加明白了虚函数原理,特分享:转载 2016-03-09 10:57:49 · 360 阅读 · 0 评论 -
c++ operator 转换构造函数
众所周知,operator可以实现运算符的重载 operator =,operator +,operator(),…什么的. 今天看STL发现奇怪的用法: … constexpr operator value_type(){} … 查了一下,原来可以转换类型,也就是实现隐式转换的功能,不过可以自定义效果,如下:#include <iostream>using namespace std;原创 2016-02-26 10:12:19 · 939 阅读 · 0 评论 -
c++强类型枚举enum class NEWTYPE
c++11以前:includeusing namespace std;class Cat { public: Cat() :m_tp(Cat::AA){} enum MYTYPE {AA,BB,CC}; static const int DD = 1; private: MYTYPE m_tp; };int main() { Cat cat原创 2016-02-28 20:05:19 · 577 阅读 · 0 评论 -
自定义visual studio的通用debug函数
这篇文章扩展以前的 http://blog.csdn.net/u012442719/article/details/50827771在unicode模式下,如何同时接受宽字符和窄字符,并且接受不同变量的debug输出:#include<windows.h>#include<iostream>#include<string>#include<cassert>//first;template<原创 2016-04-08 15:24:48 · 429 阅读 · 0 评论 -
c++ std::bind用法小结。
有些新东西,虽然不怎么使用这一套,但经常碰到,还是要了解一下。 小小试验,总结与分享:#include<functional>#include<iostream>using namespace std;class Cat{public: Cat() { //001使用内部绑定; std::bind(&Cat::cry, this)();原创 2016-04-28 14:57:50 · 4562 阅读 · 0 评论 -
介绍一个类型安全的回调库:libsigc++
类似于QT的信号与槽,可以一对一的绑定,也可以一对多多的绑定,很方便: 最初是在GTKMM官网发现的,使用c++语言,windows下也可以使用。 http://www.gtkmm.org/en/download.html下面放出2个例子 例一:绑定成员函数#include <iostream>#include <sigc++/sigc++.h>class Cat{public:原创 2016-04-18 15:21:40 · 1518 阅读 · 0 评论 -
c++双向链表构成的队列
也可以看成循环队列的。需要仔细,重点是插入与弹出,结合前篇的绘图,总结逻辑是: 1先外部元素建立连接 2后内部元素改变连接 3改变内部元素连接时,留意前驱或后驱是否为空时的特例。 以下是自定义实现://circularqueue.h#ifdef _MSC_VER#pragma once#endif // _MSC_VER#ifndef CIRCULAR_QUEUE_h_H_#defin原创 2017-02-07 09:58:54 · 956 阅读 · 0 评论 -
c++,在windows下调用子进程,并获得子进程的返回值。
win32 API真是相当复杂啊,为了调用一个函数,要读那么多参数,还要查阅相有关连的其它函数…以下是主进程代码 :#include<iostream>#include<windows.h>int main(int argc, char*argv[]){ STARTUPINFO si = { sizeof(STARTUPINFO) };//在产生子进程时,子进程的窗口相关信息原创 2017-02-16 17:02:12 · 7651 阅读 · 0 评论 -
c++ POD
POD stands for Plain Old Data,个人实践总结,表现得如同C-struct和表示得如同RAW_data,纯粹的数据;#include<iostream>#include<cstdio>class Cat{public: int v1; int v2; //生命周期不由构造函数和析构函数控制,因此:Cat(),不可以有;~Cat(),不可以有原创 2017-02-28 09:42:48 · 466 阅读 · 0 评论 -
二维数组的参数传递
#include<iostream>//第1种形式:void try1(int(*p)[2][6]){ for (int i = 0; i < 2; i++) { for (int j = 0; j < 6; j++) { std::cout << *(*(*p + i) + j); } st原创 2017-01-20 10:34:59 · 597 阅读 · 0 评论 -
c++双向链表
难点是插入与删除元素的方法,一边学习一边画图:先是插入元素方法, 1,首端插入: 2,中端插入: 3,尾端插入: 然后是删除元素的方法, a,首端删除: b,中端删除: c,尾端删除:原创 2017-02-03 13:28:10 · 519 阅读 · 0 评论