自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CCPP Blog

结构、算法、c、c++

  • 博客(20)
  • 资源 (39)
  • 收藏
  • 关注

原创 CCPP Blog 目录

CCPP Blog 结构、算法、C、CPP 博客中的所有系列和专栏的目录都可在这里找到

2015-02-07 20:31:35 4892 3

原创 C++拾遗--多线程:临界区解决子线程的互斥

C++拾遗--多线程:关键段解决子线程的互斥前言 为了解决子线程的互斥问题,windows系统提出了关键段(CRITICAL_SECTION)的概念。它一共有四个共两对操作:初始化、销毁,进入、离开。它们定义在头文件synchapi.h中。1.初始化关键段变量VOID WINAPI InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection );2.销毁关键段变量VOID WINAPI DeleteCrit

2015-02-28 21:41:11 2489

原创 C++拾遗--多线程:主线程与子线程的同步

C++拾遗--多线程:主线程与子线程的同步前言 在多线程编程时,有时是需要要求主线程与子线程同步的。正文下面的一个例子,演示了主线程与子线程之间的同步问题。程序描述:在主线程中,有一整型变量count,初始化为0。主线程把count的地址传递给开启的子线程,子线程打印获取的值,随后主线程递增count的值,再次开启另一个子线程,传递count的地址……

2015-02-27 13:06:59 7669

原创 C++拾遗--多线程:原子操作解决线程冲突

C++拾遗--原子操作解决线程冲突前言 在多线程中操作全局变量一般都会引起线程冲突,为了解决线程冲突,引入原子操作。所谓原子操作,是指不会被线程调度机制打断的操作,操作一旦开始,就得执行到结束为止。原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序是不可以被打乱,或者切割掉只执行部分。原子操作一般靠底层汇编实现。

2015-02-26 21:44:08 5888 1

原创 C++拾遗--多线程:C语言多线程的引入

C++拾遗--多线程:C语言多线程的引入前言 多线程是编程中的一个重要内容。多核时代使多线程成为一种可能,显然,一件事情多个人干,效率一定会提升。下面来看下C语言中是如何使用多线程的。正文1.CreateThread先来看一个实例

2015-02-26 17:26:35 4487

原创 C++拾遗--虚函数表

C++拾遗--虚函数原理前言 C++的多态依赖虚函数来实现。若类存在虚函数,则每一个类的实例都维护了一个地址,这个地址指向虚函数表。虚函数表中存放的是类中所有虚函数的地址。下面我们找出虚函数表的地址,从而获得每个虚函数的地址,然后使用地址直接调用虚函数。正文1.空类的size

2015-02-25 17:56:40 1943

原创 C++拾遗--引用(左值引用、右值引用)

C++拾遗--引用前言 引用就是别名(alias)。所谓别名,就是对已存在的对象另起一个名字。本身含义并不难理解,但与其它概念一组合,就成了使用难点。再加上新标准提出了新的一种引用-右值引用,引用这一概念就变得更加难以理解和使用。正文 随着新标准(新标准往往就是新的技术)的提出,引用这一概念分成两类:左值引用、右值引用。其中左值引用是最常用的一种,而右值引用则是语言使用上的一种革新。1.左值引用左值引用的基本语法Type &引用名 = 左值表达式;

2015-02-23 18:46:16 4359

原创 C++拾遗--定位new表达式

C++拾遗--定位new表达式前言 new表达式,默认下把内存开辟到堆区。使用定位new表达式,可以在指定地址区域(栈区、堆区、静态区)构造对象,这好比是把内存开辟到指定区域。正文定位new表达式的常见形式

2015-02-21 20:35:50 3504

原创 C++拾遗--new delete 重载

C++拾遗--new delete 重载前言 new和delete是操作动态内存的一对操作。对它们重载可以对内存管理进行有效的定制。正文1.局部重载特别针对某一类型,对new和delete进行重载,可以对该类型对象的动态创建实行监控。如下代码:代码一

2015-02-21 19:18:50 3477 2

原创 C++拾遗--malloc free与new delete的同与不同

C++拾遗--malloc free与new delete的同与不同前言 在C中我们常使用malloc和free来动态分配与释放内存,在C++中对应的是new和delete。这里我们来探讨下他们的同与不同。1.内置类型对相同的代码进行调试,查看内存

2015-02-20 20:27:48 2021

原创 C++拾遗--智能指针

C++拾遗--智能指针前言 内存泄露是常见的问题,新标准中的智能指针从根本上解决了这个问题。所谓的智能指针,其智能性体现在:当没有对象使用某块动态分配的内存时,那就自动释放这片内存。智能指针下面这段程序可耗尽内存,导致程序崩溃。

2015-02-19 20:07:06 1557 1

原创 C++拾遗--模板元编程

C++拾遗--模板元编程前言 模板元是用于递归加速的,把运行期的函数调用变到编译期进行代码展开,类似于内联函数。下面看一个实例:斐波那契数列第n项求解。模板元编程

2015-02-19 15:15:46 2095

原创 C++拾遗--name_cast 显式类型转换

C++拾遗--name_cast 显式类型转换前言 C++中提供了四种显式的类型转换方法:static_cast,const_cast,reinterpret_cast,dynamic_cast.下面分别看下它们的使用场景。显式类型转换1.staitc_cast这是最常用的,一般都能使用,除了不能转换掉底层const属性。

2015-02-18 22:01:30 2577 4

原创 C++拾遗--函数模板

C++拾遗--函数模板前言 泛型的核心思想是数据与算法分离。函数模板是泛型编程的基础。函数模板函数模板以 template<arg_list> 开头,arg_list是泛型参数的列表。1.模板的泛型参数个数确定实例一下面是一个加法函数模板,在实例化时,我们传入普通的数据类型。

2015-02-17 10:46:24 1599

原创 C++拾遗--构造函数(二)拷贝构造

C++拾遗--构造函数(二)拷贝构造前言 在构造函数(一)中讨论的是默认构造函数的一些应用。这里我们来探讨下其它的一些有名构造函数,及其它们的应用场景。

2015-02-12 17:41:34 1254

原创 C++拾遗--构造函数(一)默认构造

C++拾遗--构造函数(一)默认构造前言 对一个类而言,构造函数恐怕是最重要的一个成员函数了。关于构造函数的细节繁多,并且随着新标准的提出,构造函数有了新的特性。本文来集中探讨下构造函数的那些鲜为人知的一面。构造函数 构造函数的作用众所周知:在类的对象被创建时,控制对象的初始化和赋值。构造函数的一般形式:类名(arg_list);其中arg_list是用逗号隔开的参数列表。特点:无返回值类型,且不可加const限制。默认构造函数需要特别指出,无参的构造函数是默认的,有参但都有

2015-02-12 12:02:02 1751 1

原创 C++拾遗--bind函数绑定

C++拾遗--bind函数绑定前言 函数绑定bind函数用于把某种形式的参数列表与已知的函数进行绑定,形成新的函数。这种更改已有函数调用模式的做法,就叫函数绑定。需要指出:bind就是函数适配器。

2015-02-08 19:16:04 10400

原创 C++拾遗--this指针

前言 在用C++进行面向对象编程时,this指针是一个人尽皆知的东西。但我们真的清楚它吗?下面我们对它的存在意义和使用方法一一进行探讨。this指针存在意义:我们为何需要this指针?

2015-02-08 14:22:42 1948 4

原创 C++拾遗--lambda表达式

C++拾遗--lambda表达式前言 有时,我们需要在函数内部频繁地使用某一功能。此时,我们可以把这种功能写成一个独立的函数。而实际上,这个新的函数很可能是不需要在其它的地方进行调用的。我们想限定它的作用范围,最好是仅限于当前函数。而函数的内部是不可以重新定义其它的函数的。为了解决这个问题,在新的标准中,C++引入了lambda表达式(lambda expression)的概念。有了lambda表达式,C++向一门完美的语言又进了一大步。总的来说,lambda表达式极大地提升了C++的函数运用能力

2015-02-07 17:44:32 2763

原创 C++拾遗--目录

前言    C++语言标准更新很慢,截止到本文为止,最新的是C++11和C++14标准。C++是一门很有魅力,但也的确很难的编程语言,能够称得上精通它的人的确不多。本序列不致力于写成C++的百科全书,而是基于最新标准对一些语言上的难点和易于被大多数人忽略的语言点,进行探讨--故名拾遗。目录1.lambda表达式

2015-02-07 17:43:25 2860

前缀、中缀、后缀表达式

利用STL中stack,解析前、后缀表达式,并将中缀表达式转换到相应的前、后缀表达式。

2015-06-23

去除停用词.c

使用C语言,根据停用词表,对指定文件的内容扫描,从而删除文件中出现的停用词。

2015-06-22

大整数的加、减、乘、除

使用C++语言,实现大整数的加、减、乘、除。使用到了标准库的string类型。关键是逻辑上的处理。

2015-06-10

十六进制数转化为八进制数

把位数在10W以内的十六进制数成功转化为八进制数,思想是:先转化为2进制数,再把2进制数转换为8进制数。

2015-03-17

函数模板模拟printf

利用C++中的函数模板简易模拟printf()函数。设计的知识点包括函数模板、可变参数等。

2015-02-17

外排序-多路归并

外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。

2014-08-23

最小生成树:Prim算法

使用Prim算法求解图的最小生成树,其中图用邻接矩阵存储。

2014-08-05

图:FLoyd算法

使用Floyd算法,求解点对之间的最短距离。图结构使用邻接矩阵存储。

2014-08-04

求解单源最短路径:Dijkstara算法

使用Dijkstra算法求解单源最短路径问题,不仅求出最短路径,同时给出最短路径序列。

2014-08-03

有向图的拓扑排序

对于有向图进行拓扑排序,图使用邻接矩阵的存储结构。

2014-08-03

图的遍历:深度优先、广度优先

在邻接矩阵的存储结构下,实现图的深度优先遍历和广度优先遍历。

2014-08-02

图的实现:邻接表

使用邻接表实现图结构,无向的、有向的、无权的和有权的都可支持。

2014-08-01

图的实现:邻接矩阵

使用邻接矩阵实现图结构,无论是有向图、无向图、带权图还是无权图,都可以指定。

2014-07-31

模式匹配:KMP算法

使用KMP算法实现模式匹配,包括next数组的求解,kmp算法的实现。关键代码有详细注释。

2014-07-23

哈夫曼树&哈弗曼编码

哈夫曼树 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。用c++实现构造哈夫曼树、哈夫曼编码。

2014-07-12

桶排序(二维数组)

桶排序(Bucket Sort)是对基数排序的一个变种。在排序过程中没有用到计数数组,而是用不同的桶来暂时存储关键字。使用二维数组模拟桶。

2014-07-11

桶排序(静态队列)

桶排序(Bucket Sort)是对基数排序的一个变种。在排序过程中没有用到计数数组,而是用不同的桶来暂时存储关键字。使用静态队列模拟桶,实现桶排序。

2014-07-11

二叉堆:最大堆

使用c++实现最大堆。提供常见操作,如插入、删除、堆化数组、堆排序、上下调整、向下调整。

2014-07-08

二叉堆:最小堆

使用c++实现最小堆。提供常见操作,如堆化数组,插入,删除,堆排序,遍历堆。

2014-07-08

二叉搜索树的c++实现

使用二叉链表和c++来实现二叉搜索树,提供插入、删除、遍历、求最小节点、最大最节点等操作。

2014-07-05

二叉树的二叉链表实现

使用二叉链表实现二叉树,提供常见的操作:各种遍历,求树高,节点数。

2014-07-03

一元多项式的加法、减法、乘法

使用链表来实现单元多项式的加法、减法、乘法。其中,加法是其它运算的基础,减法:poly1-poly2=poly1+(-poly2),乘法:poly1*poly2,可用poly1乘以poly2的每一项,相加其乘积结果。

2014-06-17

队列的应用:优先级队列

使用顺序存储实现优先级队列,展示优先级队列和普通队列的区别之处。

2014-06-12

队列的实现:链式队列

用链表的形式实现队列,提供常见操作,出队、入队……

2014-06-09

队列的实现:顺序队列

使用顺序存储的方式实现队列,提供队列的常见操作。

2014-06-07

栈的实现:链式栈

使用链式结构来实现栈,提供常见的栈操作,push() pop() top() empty() size()

2014-06-05

栈结构解析算术表达式

使用栈结构解析算术表达式,加、减、乘、除、求余,并支持多位数运算

2014-05-28

用栈解析算术表达式

用栈解析算术表达式,并且做到了多位数运算,运算包括加、减、乘、除、求余

2014-05-28

栈的实现顺序栈

栈的顺序栈形式,简易的实现,push() pop() top() size() empty()

2014-05-24

约瑟夫问题的静态链解法

这是约瑟夫问题的静态链解法,代码量少,易理解,是一种很好的思路

2014-05-24

单向循环链表解决约瑟夫问题

用单向循环链表解决约瑟夫问题。使用c++语言,结构体,链表的操作。

2014-05-12

线性表-单链表

单链表的类定义和类实现,常见操作,插入、删除。

2014-05-12

查找数组中第k大的数

给定一数组,查找数组中第k大的数。代码中借助快速排序中的partition方法来实现。

2016-01-08

字符串转化为整数

把一个字符串转化为相应的整数。特别注意符号与溢出的问题。

2016-01-06

单双精度浮点数解析.c

对于计算机中常见的浮点数存储格式进行分析,编程提取float和double中的阶码好尾码。

2015-12-16

printf的类模板实现.cpp

使用C++的类模板机制来简单实现库函数printf。

2015-12-16

LeetCode--Linked List.cpp

文件中包含了LeetCode中Tag为LinkedList的题目参考代码。

2015-12-14

LeetCode-Linked List.cpp

这是LeetCode中Linked List所有题目的参考代码。(截止到目前为止:2015年12月14日)。

2015-12-14

在同一段内存上存储不同类型的数据

使用malloc动态分配一段内存,在该段内存的首地址处的四字节下记录不同数据块的个数,使用合适的方式存入数据,并相应读取。

2015-06-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除