C++
文章平均质量分 80
阳光的颜色
我喜欢程序员,他们单纯固执,容易体会到成就感。面对压力,能够挑灯夜战不眠不休。面对困难,能够迎难而上挑战自我。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想,用智慧开创属于自己的事业。我想说的是,其实我是一个程序员
展开
-
C++ wchar_t介绍以及和string类型的转换
我们知道char类型变量可以存储一个字节的字符,它用来保存英文字符和标点符号是可以的,但是对于汉字、韩文以及日文这样的字符却不可以,因为汉字、韩文以及日文每一个文字都占据两个字节,为了解决这个问题,c++提出了wchar_t类型,称之为双字节类型,又称宽字符类型。原创 2014-11-08 12:28:34 · 7135 阅读 · 0 评论 -
扩展系统功能--装饰模式
对已有对象的功能进行扩展(装饰),以获得更加符合用户需求的对象,使得对象具有更加强大的功能,这就是装饰模式。基于继承的复用缺点:(1) 系统扩展麻烦,在某些编程语言中无法实现(多继承问题)。(2) 代码重复,不利于对系统进行修改和维护。(3) 系统庞大,类的数目非常多。装饰模式概述根据合成复用原则,在实现功能复用时,多用关联(组合),少用继承。装饰类作用原创 2015-07-14 20:18:07 · 1080 阅读 · 0 评论 -
二叉搜索树
二叉查找树定义二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均不小于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉排序树的查找过程和二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即为对无原创 2015-08-08 16:34:33 · 954 阅读 · 0 评论 -
统计一个文件英文单词的个数
/* 统计一个文件内,英文单词的个数,并按 word = count的格式顺序输出 统计输出总的英文单词个数*/#include #include #include #include #include using namespace std;int main(){ string line; //打开输入文件 ifstream input("transform.txt"原创 2015-07-08 14:53:51 · 4606 阅读 · 0 评论 -
给定一个二叉树,获取该二叉树的宽度深度
给定一个二叉树,获取该二叉树的宽度深度。原创 2015-07-06 16:23:00 · 2154 阅读 · 0 评论 -
一元多项式化简
背景:编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式。 说明: l 多项式由若干个单项式组成,单项式之间为加、减(+,-)关系。l 单项式指数字与字母幂的乘积构成的代数式。对一元多项式,字母只有一种。l 同类项合并指将多项式中指数相同的单项式,系数经过加减求和,合并为一个单项式。按指数降序指多项式中,单项式按指数从大到小顺序相原创 2015-07-07 19:22:48 · 4577 阅读 · 0 评论 -
二维数组的列排序
给出一个二维数组,请将这个二维数组按第i列(i从1开始)排序,如果第i列相同,则对相同的行按第i+1列的元素排序,如果第i+1列的元素也相同,则继续比较第i+2列,以此类推,直到最后一列。如果第i列到最后一列都相同,则按原序排列。原创 2015-07-05 22:00:11 · 4544 阅读 · 0 评论 -
对容器元素重新排序的算法
假设我们要分析一组儿童故事中使用的单词,例如想知道他们使用了多少个6个或者以上字母组成的单词。每个单词只统计一次,不考虑它出现的次数。程序代码如下:#include #include #include #include using namespace std;//comparison function to be userd to sort by word lengthbool原创 2015-07-04 19:40:43 · 1171 阅读 · 0 评论 -
c++ 单词转换 map对象
#include #include #include #include #include #include using namespace std;ifstream& openfile(ifstream &in,const string &filename){ in.close();//close in case it was alrady open in.clear();//原创 2015-07-02 17:01:34 · 1132 阅读 · 0 评论 -
对象间的联动--观察者模式
随着交通信号灯的变化,汽车的行为也将随之变化,一盏交通信号灯可以指挥多辆汽车。在软件系统中,有些对象之间也存在类似交通信号灯和汽车之间的关系,一个对象状态或者行为的变化将导致其他对象的状态或者行为也发生变化,它们之间将产生联动。为了更好的描述对象之间存在的这种一对多(包括一对一)的联动,观察者模式应运而生,它定义对象之间一对多的依赖关系,让一个对象的改变能够影响其它对象。观察者模式概述原创 2015-07-15 15:05:01 · 1091 阅读 · 1 评论 -
提供统一入口--外观模式
在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其它类进行交互,而这些需要交互的其它类通常作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似服务员一样的角色,由它复杂和多个业务类交互,使用这些业务类的类只需要和该类交互即可。外观模式,通过引入一个新的外观类来实现该功能,外观类充当了软件系统的“服务员”,它为多个业务类的调用提供了统一的入口,简原创 2015-07-16 20:18:48 · 1549 阅读 · 0 评论 -
快速排序
//根据算法导论提供的算法,编写程序代码:#includeusing namespace std;//实现对数组的原址排序,关键int partition(int *A,int p,int r){int x=A[r];int i=p-1;for(int j=p;j!=r;j++)if(A[j]i++;int temp=A[j];A[j]=A[i];A原创 2013-10-13 23:02:41 · 917 阅读 · 0 评论 -
统计重复字符串的个数
题目:统计重复字符串的个数,并输出。示例输入:abcdef示例输出:a1b1c1d1e1f1示例输入:abbbbbbbbbbbcc示例输出:a1b11c2原创 2015-09-01 10:46:31 · 6040 阅读 · 3 评论 -
C++ 内存分布
C++内存分布参考链接http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html#作者 吴秦为什么需要知道C/C++的内存布局和在哪可以可以找到想要的数据?知道内存布局对调试程序非常有帮助,可以知道程序执行时,到底做了什么,有助于写出干净的代码。本文的主要内容如下:源文件转换为可执行文件可执行程序组原创 2015-08-15 11:10:58 · 1646 阅读 · 0 评论 -
求链表的倒数第K个结点
题目 输入一个单向链表,输出该链表中倒数第 k 个结点。链表的倒数第 0 个结点为链表的尾指针。思路 解法一: 可以先遍历一遍统计链表个数,然后找到倒数第k个的下标再遍历,这样时间复杂度比较高 解法二: 双指针联动:一个指针先跑K -1步,然后两个指针一起跑。当第一个指针跑到尾节点时,第二个指针恰好是倒数第K个节点。需原创 2015-08-14 13:29:52 · 917 阅读 · 0 评论 -
atoi函数的详细实现(考虑溢出)
atoi()函数的功能:将字符串转换成整型数。atoi()会扫描参数str字符串,跳过前面的空白字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回(返回转换后的整型数)。写atoi函数的时候需要注意一下几点1. 忽略字符串前的空白字符2. 字符串所表示数值的正负号3. 结束条件,遇到非数字或者字符'\0'结束4. 考虑溢原创 2015-08-14 11:37:03 · 7719 阅读 · 3 评论 -
八皇后问题(C语言版本)
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。原创 2015-07-05 15:10:31 · 40316 阅读 · 15 评论 -
栈的压入、弹出序列
解题分析:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入了栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列原创 2015-08-25 17:58:33 · 907 阅读 · 0 评论 -
剑指offer26:复杂链表的复制
复杂链表的复制第三步,我自己写了一个函数,易于理解。把第二步得到的链表拆分成两个链表,奇数位置上的结点组成原始链表,偶数位置上的结点组成复制出来的链表。原创 2015-08-26 17:55:26 · 1077 阅读 · 0 评论 -
c++ 输出虚函数表内容
class Base{ public: virtual void f(){cout<<"Base::f"<<endl;} virtual void g(){cout<<"Base::g"<<endl;} virtual void h(){cout<<"Base::h"<<endl;}};typedef void (*Fun)(void);int main(){ Base b原创 2015-06-25 22:15:44 · 1583 阅读 · 0 评论 -
位运算实现乘法运算
在回答本问题之前,先学习一些有关位运算的知识。(1) 常用的等式: -n=~(n-1)=~n+1(2) 获取整数n的二进制中最后一个1: n&~(n-1)或者n&(-n)。例如n=010100,则-n=101100,n&(-n)=000100。(3) 去掉整数n的二进制中最后一个1: n&(n-1)。例如n=010100,n-1=010011,则n&(n-1)=010000。注:对原创 2015-06-18 12:18:14 · 14351 阅读 · 0 评论 -
C++对象构造问题
#includeusing namespace std;class Base1{public: Base1(){ cout<<"Base1()"<<endl; } Base1(int a):base1a(a){ cout<<"Base1(int)"<<endl; }private: int base1a;};class Base2{public: Base2(原创 2015-03-24 20:36:26 · 806 阅读 · 0 评论 -
二叉树的相关操作代码(继续补全中)
#ifndef BITREEOPERATION_H#define BITREEOPERATION_H#include#include#include#includetypedef char ElemType;typedef struct BiNode{ ElemType data; struct BiNode *lchild,*rchild;}BiNode,*BiTree;原创 2015-03-27 15:17:50 · 851 阅读 · 0 评论 -
c++ 字符串常量
字符串常量,之所以称之为常量,因为它可一看作是一个没有命名的字符串且为常量,存放在静态数据区。这里说的静态数据区,是相对于堆、栈等动态数据区而言的。原创 2015-03-16 10:44:03 · 6311 阅读 · 0 评论 -
boost库在windows的编译及配置(VS2010)
C++有一个强大的Boost,里面有好多功能是C++标准库所不支持的。看着Boost中那些强大的功能模板怎能不动心呢!下面我们就来看看如何在VS2010下使用Boost库。系统:windows7开发环境:Visual Studio 10boost版本:boost_1_55_0原创 2015-01-16 16:16:53 · 1477 阅读 · 0 评论 -
vs2012 格式化代码和快速注释快捷键(亲测)
Ctrl+E,F ----格式化选中的代码 Ctrl+K+F原创 2014-11-08 12:18:02 · 23141 阅读 · 3 评论 -
C++求解汉字字符串的最长公共子序列 动态规划
最近,我在网上看了一些动态规划求字符串最长公共子序列的代码,但是无一例外都是处理英文字符串,当处理汉字字符串时,经常会出现乱码或者不正确的情况。 我对代码进行了修改,使用wchar_t类型存储字符串,能够正确的处理英文字符串和汉字字符串的最长公共子序列。代码如下:原创 2014-11-08 12:11:12 · 1872 阅读 · 2 评论 -
c++ setlocale函数的应用
setlocale配置地域化信息。语法: char * setlocale ( int category, const char * locale );返回值: 字符串函数种类: 操作系统与环境内容说明本函数用来配置地域的信息,设置当前程序使用的本地化信息。原创 2014-11-08 11:56:34 · 3796 阅读 · 0 评论 -
C++ 对象模型详细讲解(特别容易理解)
c++对象模型系列 转 一、指针与引用一 概括指针和引用,在C++的软件开发中非常常见,如果能恰当的使用它们能够极大的提 高整个软件的效率,但是很多的C++学习者对它们的各种使用情况并不是都了解,这就导致了实际的软件开发中经常会内存泄漏,异常抛出,程序崩溃等问题。对 于C和C++的初学者,那更是被它们搞的迷迷糊糊。本篇作为[深入C++]系列的第一节,我们就带领大家把原创 2014-11-16 21:06:11 · 4012 阅读 · 0 评论 -
C/C++程序内存分配(和Linux进程分配有一些区别)
一、一个由C/C++编译到程序占用的内存分为以下几个部分:1、栈区(stack)——由编译器自动分配释放,在不需要的时候自动清除。用于存放函数的参数、局部变量等。操作方式类似数据结构中的栈(后进先出)。2、堆区(heap)——一般由程序员分配释放,若程序员分配后不释放,程序结束后可能由OS回收。不同于数据结构中的堆,分配方式有些类似链表。3、全局区(静态区)——全局变量和静态变量存储在这里。程序结束后由系统释放。在以前到C语言中,全局变量又细分为初始化的(DATA段)和未初始化到(BSS段),在原创 2015-04-04 11:36:36 · 1583 阅读 · 0 评论 -
C++ operator= 注意事项
下面先看一段代码:#include using namespace std;class Point{public: Point(float x=0.0,float y=0.0):_x(x),_y(y){} Point& operator=(const Point& rhs); void printData(){ cout<<"_x="<<_x<<endl; cout<<"原创 2015-04-10 11:29:04 · 3426 阅读 · 0 评论 -
atoi和itoa函数
#include #include #include int Myatoi(const char* str){ if(str==NULL)//判断指针是否为空 { printf("Pointer is NULL\0"); return 0; } while(*str==' ')//忽略前导空字符 str++; int sign=1;//判断符号 if(*str=='原创 2015-06-22 15:16:29 · 1094 阅读 · 0 评论 -
C++指针数组、数组指针、数组名及二维数组技巧汇总
这篇文章主要介绍了C++指针数组、数组指针、数组名及二维数组技巧汇总,对于深入理解C++数组与指针来说非常重要,需要的朋友可以参考下。本文较为详细的分析了关于理解C++指针数组,数组指针,数组名,二维数组的一些技巧。是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用。原创 2015-06-18 16:20:46 · 1069 阅读 · 0 评论 -
Contains Duplicate II
Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and j is at most k.原创 2015-06-18 21:57:20 · 879 阅读 · 0 评论 -
如何使用宏求结构体的内存偏移地址
在C语言中,ANSI C标准允许值为0的常量被强制转换成任何一种类型的指针,而且转换结果是一个空指针,即NULL指针,因此对0取指针的操作((type*)0)的结果就是一个类型为type*的NULL指针。 但是如果利用这个NULL指针来访问type类型的成员当然是非法的。 因为&(((type*)0)->field)的意图只不过是计算field字段的地址,C语言编译器根本不生成访问type成员的代码,而仅仅是根据type的内容布局和结构体实例地址在编译期计算这个常量地址,这样就完全避免了通过NULL指针访原创 2015-06-16 15:54:17 · 2465 阅读 · 0 评论 -
C/C++ union用法
在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处原创 2015-05-04 16:52:45 · 959 阅读 · 0 评论 -
字符串简单匹配算法
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n),KMP匹配算法,可以证明它的时间复杂度为O(m+n).。原创 2015-04-23 09:23:55 · 3054 阅读 · 0 评论 -
C++ 异常对象
1.catch子句参数为对象先看一段代码:#include #include using namespace std;class MyException :public exception{public: MyException(){ cout<<"MyException()"<<endl; } ~MyException(){ cout<<"~MyException(原创 2015-04-12 11:51:05 · 1095 阅读 · 0 评论 -
Java与C++在面象对象基本概念上的区分
众所周知,C++和Java是当今两种主流的面向对象语言,对于两种语言的优劣比较,每个人都有自己不同的看法,比较一致的看法是C++是编译型高级语言而Java是解释型的,因此C++快速而Java兼容性好,C++适合底层控制而Java长于网络编程。不管怎么说,可以肯定的一点是两种语言还会在相当长的一段时间内并存下去,这要求我们在精通两者其一的同时,对另一个也应该至少清楚地掌握其框架结构。因为Java是从C++衍生出来的,所以两种语言在基本语法和概念上都有很多相似之处,然而它们之间也存在一些不可忽视的差异,本文试图原创 2015-04-22 21:18:27 · 885 阅读 · 0 评论 -
剑指offer42:翻转单词顺序
剑指offer42:翻转单词顺序原创 2015-09-02 11:44:49 · 1216 阅读 · 0 评论