
C++
文章平均质量分 92
步步为赢567
毕业于华中科技大学,硕士研究生
展开
-
C++中各种类型的成员变量的初始化方法(mark-好)
C++类中各种不同类型成员根据是否static 、是否const类型的初始化方法不尽相同,写代码时经常搞乱,网上搜了一下资料,全部总结一下。一、例子[cpp] view plaincopyprint?-----------------Test.h---------------------------- #pragma once class Tes转载 2015-04-06 15:43:34 · 472 阅读 · 0 评论 -
数据库的优化方法
数据库的优化方法索引:创建索维护并保持索引列的唯一性 ,索引有助于提高检索性能,但过多或不当的索引也会导致系统低 效。因为用户在表中每加进一个索引,数据库就要做更多的工作。过多的索引甚至会导致索引碎片。 分表:针对每个时间段内产生大量的数据,可以考虑采用一定的策略将数据存到多个数据表中。 分库:按照模块相关的特征分布到不同的数原创 2015-05-27 08:16:01 · 459 阅读 · 0 评论 -
c++ 动态判断基类指针指向的子类类型(typeid)
我们在程序中定义了一个基类,该基类有n个子类,为了方便,我们经常定义一个基类的指针数组,数组中的每一项指向都指向一个子类,那么在程序中我们如何判断这些基类指针是指向哪个子类呢?如下面的CLine2d是CCurve2d的一个之类,可以用下面的形式判断!原创 2015-06-19 14:28:50 · 2210 阅读 · 0 评论 -
如何调用其他文件里面的全局变量
(1)类声明在下面的头文件里面在CPP文件里面定义(2)在要调用的文件用下面三个步骤(划线处)调用原创 2015-06-17 19:00:04 · 5072 阅读 · 0 评论 -
kmp算法原理
前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不大好理解,没有与程序结合起来讲。今天我在这里讲一讲我的一些理解,希望大家多多指教,如果有不清楚的或错误的请给转载 2015-06-01 12:39:54 · 397 阅读 · 0 评论 -
软件设计的七大原则
软件设计的七大原则设计模式遵循的一般原则:1.开-闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展。这是面向对象设计(OOD)的基石,也是最重要的原则转载 2015-06-01 14:00:19 · 404 阅读 · 0 评论 -
类的跨工程调用
(1)类导出(2)配置设置:文件包含路径,依赖库路径,依赖库名称(3)调用方法原创 2015-06-24 09:28:49 · 543 阅读 · 0 评论 -
c++ 设计模式之创建者(生成器)模式
http://blog.youkuaiyun.com/lbqbraveheart/article/details/7083417个人感觉这个模式,使用的应该较少,主要应用于流程性的东西,创建者负责构建一个对象的各个部分,并且完成组装的过程,可以这么理解,创建者模式类似与一个步骤基本固定,但是每个步骤的具体形式却又可以变化的这类对象的创建。废话不多说了,进入我们的创建者模式。意图:将转载 2015-06-01 19:12:52 · 482 阅读 · 0 评论 -
进程与线程的区别(转)
线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行.进程和线程都是由操作系统所体会的程序运行的基本单元,系转载 2015-06-24 20:13:15 · 309 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)
概述: 我们最近在开发一个支持多种压缩类型文件的解压缩且制作成pdf的一个应用。对我们的架构来说我们需要支持多种压缩文件类型,但却有固定的操作顺序(先解压缩,在读取里面的文件分析、制作pdf)。我们抽取他们的共同点:这些操作的固定顺序,把他放到我们的父类里;他们的变化点:这些个具体的操作,去留给不同的子类去实现。这个就是模板方法模式,他定义一个操作中的算法的骨架(例子中的固定的操作转载 2015-06-06 15:21:03 · 409 阅读 · 0 评论 -
效率优化
1、减少IO,减少读文件次数2、是否可以考虑分解任务,然后并行3、代码层面,利用合理的数据结构,减少相应的数据copy,减少不必要的长跳转,减少str的搜索4、避免阻塞原创 2015-06-11 17:47:06 · 957 阅读 · 0 评论 -
内存泄漏以及常见的解决方法
之所以撰写这篇文章是因为前段时间花费了很大的精力在已经成熟的代码上再去处理memory leak问题。写此的目的是希望我们应该养成良好的编码习惯,尽可能的避免这样的问题,因为当你对着一大片的代码再去处理此类的问题,此时无疑增加了解决的成本和难度。准确的说属于补救措施了。1. 什么是内存泄漏(memory leak)? 指由于疏忽或错误造成程序未能释放已经不再使用的内存的转载 2015-06-13 11:18:03 · 19836 阅读 · 0 评论 -
两种防止头文件二次编译的方法
(1) #ifndef #ifndef是最早期使用的方法,是基于语言的宏定义名字不能冲突的前提下的。优点:这种方法不仅能保证同一个头文件不会被包含两次,也可以保证内容完全相同的两个文件也只能被包含一次。缺点:你的#ifndef 后面跟的宏名字和你程序中的其他宏名字发生了”撞车“,那么会出现严重后果例子:file1.h中原创 2015-05-15 15:43:27 · 1478 阅读 · 0 评论 -
C++中的explicit
2C++中的explicitC++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 ,2 是个默认且隐含的类型转换操作符。所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。转载 2015-05-15 16:02:03 · 243 阅读 · 0 评论 -
pragma warning
1 常用去警告: #pragma warning(disable:4035) //no return value #pragma warning(disable:4068) // unknown pragma #pragma warning(disable:4201) //nonstandard extension use转载 2015-04-08 18:40:06 · 493 阅读 · 0 评论 -
简单工厂模式(C++描述)
一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。 1.静态工厂方法统一管理对象的创建。静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。2.静态工厂方法推迟了产品的实例化。通过X转载 2015-04-08 19:44:54 · 457 阅读 · 0 评论 -
GMemoryStream和std::iostream转换
说明:123456typedef QBuffer GBuffer;class GMemoryStream : public GBuffer{ ...};class std::stringstream : public std::iostrea原创 2015-04-29 10:10:10 · 568 阅读 · 0 评论 -
QT中流Qbuffer的应用总结
一:概述1) QBuffer 继承类QIODevice,如下:class Q_CORE_EXPORT QBuffer : public QIODevice2) QIODevice中有本文应用的函数:(1)qint64 write(const char *data, qint64 len);(2) qint64 read(char *data, qint64 maxl原创 2015-04-27 15:08:57 · 7895 阅读 · 0 评论 -
std::vector中erase的用法误区
(1)std::vector中erase函数是删除一个对象,传的参数是要删除值的迭代器;如果删除的是vector中的最后一个元素,并且迭代器还要做++ 操作,就容易出问题。如下:void test(){ std::vector vecInt; vecInt.push_back(1); vecInt.push_back(1); vecI原创 2015-04-27 10:11:32 · 2286 阅读 · 1 评论 -
怎样建立在整个类中都恒定的常量
一:讨论有时我们希望某些常量只在类中有效。 (1) 由于#define 定义的宏常量是全局的,不能达到目的 (2)于是想当然地觉得应该用 const 修饰数据成员来实现。const 数据成员的确是存在的,但其含义却不是我们所期望的。const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。原创 2015-04-27 14:03:27 · 678 阅读 · 0 评论 -
怎样使自己的头文件中的内容尽可能的少
C++中头文件反复包含,为了减少编译时间,尽可能的减少头文件中的内容是我们一贯方法!(1)防止头文件反复编译#ifndef GGJBARLINE3DENTITY_H#define GGJBARLINE3DENTITY_H....#endif //GGJBARLINE3DENTITY_H这种定义宏的形式,防止头文件编译是经常用的方法注意:定义的宏一定要唯原创 2015-04-27 14:44:11 · 454 阅读 · 0 评论 -
C++最好的释放对象内存
(1)迭代器优于下标的方式(2) 释放时先判空(记得变量要初始化)以下为目前认为比较好的方式: for (std::vector::iterator itr = m_vecEntityList.begin(); m_vecEntityList.end() != itr; ++itr) { if (nullptr != (*itr原创 2015-04-27 12:14:25 · 1334 阅读 · 0 评论 -
如何退出函数时再做一些固定的事情(比如释放内存)--scopeguard
socope.h文件:#ifndef scopeguard_h__#define scopeguard_h__namespace smn{ template class ScopeGuard { Fun f_; bool active_; public: ScopeGuard(Fun f): f_(st原创 2015-04-27 17:22:34 · 545 阅读 · 0 评论 -
C++编译告警
如图一:可以设置告警失效或升级为错误。如图二:也可以设置告警为错误。原创 2015-04-08 18:46:00 · 1054 阅读 · 0 评论 -
C++变量的初始化
一:初始化的必要性初始化就是把变量赋为默认值,在C语言等高级语言中,为每一个变量赋初值被视为良好的编程习惯,有助于减少出现Bugs的可能性。二:初始的方法http://www.douban.com/note/66957147/http://blog.youkuaiyun.com/jhj735412/article/details/7520528未完待续原创 2015-04-28 10:25:53 · 419 阅读 · 0 评论 -
std::vector中erase函数的用法
(已调试)//std::vector, erase函数的用法void VecEraseFun(){ std::vector VecInt; for (size_t i = 1; i { VecInt.push_back(i); } std::vector::iterator it = VecInt.begin(); for (it =原创 2015-07-29 15:03:40 · 5586 阅读 · 0 评论