- 博客(47)
- 收藏
- 关注
原创 中缀表达式转前缀和后缀表达式
之前笔试中国电信IT研发中心的时候,遇到了几个前、中、后缀表达式的相互转换,当时忘得差不多了,今天好好把该方面的知识好好复习,并把相关代码和思路自己缕了一遍:将中缀表达式转换为前缀表达式:遵循以下步骤:(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;(2) 从右至左扫描中缀表达式;(3) 遇到操作数时,将其压入S2;(4) 遇到运算符时,比较其与S1栈顶运算符的优
2016-10-06 22:23:49 944
原创 二叉搜索树的增删查
今天把搜索二叉树的思路又理了一遍,把代码又从头到尾敲了一遍,各位看客就不要在意代码粗糙和内存溢出了,主要把插入和删除的过程理了一遍,其中比较复杂的地方就是搜索二叉树的删除,涉及了很多次的指针重新指向,比较容易晕。另外,对于二叉树,在上溯的时候要特别注意根节点这个特殊的临界状态(大部分情况把根节点的父结点指向空,也可以设一个head结点,使root和head的父结点相互指向)。最后注意null结点不
2016-09-05 16:48:44 564
原创 剑指offer(二)
源码如下://面试题3 二维数组的查找class two_demision_find{public: two_demision_find(int (*tem)[4],int n) { for(int i=0;i<n;i++) { vector str; for(int j=0;j<4;j++) { str.push_back(tem[i][j]);
2016-09-04 16:43:04 668
转载 多线程共享资源
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此
2016-09-01 19:50:28 604
原创 图的基本算法
图在程序开发中是一个比较重要的数据结构,其基本的算法如:广度优先(BFS)、深度优先(DFS)是图算法的基本入门算法,现在总结如下:#include #include #include using namespace std;struct node_edge{ int end_node_id; //终点结点的编号 int cost;//这条边的权值 node_edg
2016-08-30 20:08:44 455
原创 实现strtok_r()函数
Linux中的字符串分段函数strtok()函数是不可重入和线程不安全的,所以后来又提供了相应的线程安全和可重入的函数strtok_r()函数,然而在window系统中对应的是strtok_r()函数,为了详细了解函数的代码结构,我按照相应的功能,自己编写了一个类似功能的字符串分割函数,代码如下,在vs2012中能够正常运行,如有错误还请指正!class mystrtok{public:
2016-08-25 20:48:42 798
转载 leetcode算法题(一)
1、判断是否是颠倒字母顺序构成的字class Anagram {public: vector anagrams(vector &strs) { map > group; for (const auto &s : strs) { string key = s; sort(key.begin(), key.end()); group[key].push_back(
2016-08-24 15:40:07 419
原创 华为OJ算法题(一)
1、火车进站class train_station{public: void get_result() { int num=0; int tem=0; cin>>num; int size=num; while(size--) {
2016-08-24 15:19:07 768
转载 导致索引失效的可能情况
如下是可能导致索引失效的情况: 1.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误. 由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效. 错误的例子:select * fromtest where tu_mdn=13333333333;
2016-08-23 15:50:49 8452
转载 聚集索引和非聚集索引详解
转载地址:http://www.cnblogs.com/aspnethot/articles/1504082.html聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。 聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像
2016-08-23 15:06:24 586
转载 数据库delete和truncate
1、在功能上,truncate是清空一个表的内容,它相当于delete from table_name。2、delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments, 而truncate不会。3、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后
2016-08-23 11:27:19 428
转载 数据库使用索引的利弊
索引概念: 索引是由用户创建,能够被修改和删除的,实际存储在数据库中的物理存在,它是某一个表中一列或者若干列值的集合和相应的指向表中物理标志这些值的数据页的逻辑指针清单。索引的优点: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
2016-08-22 22:17:32 1019
原创 多线程环境下使用c++输出流和printf函数的区别
今天在学习Linux多线程编程的时候,出现了一个比较怪异的现象,在使用读写锁访问并打印数据时出现了输出数据混乱的现象,因为多线程编程大部分用的是c的函数,但由于本人对c++比较熟悉,所以习惯性地在c代码中混杂一些c++的语句,尤其是c++的输出流cout,但会出现如上的问题,后来我就测试性地把cout输出部分全部改为printf函数,其他代码没变,重新运行发现就不会出现之前的问题了,所以得到如下结
2016-08-18 22:30:58 4977 4
转载 c++程序连接及装载过程详解
今天看到一位老师写的精彩的关于c++程序的编译和链接过程的详细过程的介绍,看完之后很多问题都豁然开朗,我也试着按着老师的步骤一步步跟踪了代码,学到了很多东西,所以把老师的文章原封不动的copy过来,供今后参考用(详细链接:http://tech.meituan.com/linker.html)###引言随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学
2016-08-13 20:53:26 3335
原创 基类和派生类内存详解
昨天室友问了我一个c++基类和派生类的内存方面的问题,由于当时不能给出确切的答案,所以今天在VS上面一个个测试了一遍,今记录下来。 问题归结为如下代码:class A{public: A():a(0) { cout<<"this is A's contructor!"<<endl; } ~A() { cout<<"this is A's destory"<<endl;
2016-08-12 19:09:10 2170
原创 输入输出流>>和<<操作符对字符串操作的一些问题详解
一直以来我对string和char*以及char[]在输入输出时的细节比较模糊,今天专门写了个demo把问题测试了一遍,记录如下:首先请看如下代码:char *ch="abcd";cin>>ch;cout猜猜上面会出现什么情况?没错,程序会崩溃,因为“abcd”在静态区,是不能改的,ch指针指向该区域,而cin>>操作会尝试改变该区域的数据,修改常量当然会崩啊,为了验证自己的猜
2016-08-10 17:48:43 586
转载 Python中__init__.py文件的作用
在创建python包的过程中,IDE都会在包根目录下创建一个__init__.py文件,该Python文件默认是空的.目录结构如下:Pycharm下的package树结构:在Finder中的目录结构:从Finder中的目录就可以看出来,每个package实际上是一个目录(Directory),那么IDE是怎么识别它为package呢?没错,__init__.py的第一个作用就是
2016-08-08 11:18:23 5936
原创 基于Python的二叉树遍历算法
今天用Python把二叉树的三种遍历都实现了一遍,用作学习Python的练手程序:#/usr/bin/python#coding: utf-8from collections import deque#二叉树的节点结构class Node(): def __init__(self,data=None,left=None,right=None): self.dat
2016-07-30 15:04:00 884
原创 剑指offer面试题31、34、36、38
剑指offer面试题31、34、36、38代码如下://面试题31:连续子数组的最大和class Max_sum{public: int get_maxsum(int num[],int len) //(动态规划) { if(num==nullptr||len<=0) return NULL; vector> result(len,vector(len,0));
2016-07-28 16:25:39 482
转载 Python不能对字符解码的问题解析
今天在做简单的Python爬虫时遇到了编码错误的问题,查找资料得到如下结论:(转载记录,便于今后查找)报错的异常是 UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence此问题,还是很具有代表性的,此处,专门整
2016-07-27 21:46:41 4721
原创 剑指offer面试题30:用自定义堆实现
保存数组的前k个最小值,剑指offer用的是STL中的multimap容器,我就通过自己实现一个最大堆来实现同样的效果,时间复杂度同样为O(nlogk),理解起来也比较简单,代码如下://找最小的k个数,用堆来操作class heap{public: void push(int num) { result.push_back(num); keep_heap(resul
2016-07-25 19:49:23 400
原创 剑指offer面试题28-29
实现剑指offer的面试题28、29://面试题28: 字符串的排列class Permutation{public: void get_permutation(char *str,char* begin) { if(str==nullptr) return; if(*begin == '\0') { cout<<str<<endl; return;
2016-07-25 17:16:40 353
原创 装饰者、适配器和外观模式详解
设计模式中,装饰者、适配器和外观模式这三种模式运用的比较多,但三者有一定的相似性,所以比较不好区分,今天我就来详细谈谈这三个模式。1、装饰者模式 《设计模式》上的定义为:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案,装饰者模式的关键点是装饰者和被装饰者对象有相同的超类型,所以可以在任何需要原始对象的场合用装饰过的对象代替它。装饰者可以在所委托被装饰者
2016-07-21 21:16:34 1001
原创 剑指offer二叉树等的操作(第四章)
今天把剑指offer第四章的内容学习了遍,按照自己的理解,编写代码如下:#include #include #include #include #include using namespace std;//面试题21:包含min函数的最小栈templateclass my_stack{public: void push(T t) { if(s1.empty
2016-07-21 17:13:31 681
原创 红黑树的插入操作详解(插入调整)
c++标准库中STL的关联容器(set、multiset、map、multimap)都是用的红黑树作为底层代码,而且红黑树在快速查找的结构里面用的比较多,想比于平衡二叉树,红黑树没有那么严格的限制条件(平衡二叉树要求结点的深度之差不超过1,而红黑树则没有这个限制),虽然红黑树是一种弱化的AVL树,但在数据查找效率方面依然不必AVL差,而且由于AVL的平衡条件要求比较严格,所以,当插入一个数据时,极
2016-07-20 20:16:13 1176
原创 C++四种常用的类型转换机制
在C语言中,我们常常使用 (type)expression 这样的语句来把expression表达式强制转换为type类型的数据,而在c++中我们引用了四种类型转换操作符:const_cast,static_cast,dynamic_cast和reinterpret_cast;1、static_cast 的威力和c语言的旧式转型有相同的效果和相同的限制;2、dynamic_cast 将指向
2016-07-18 16:00:29 938
原创 剑指offer常用链表操作
剑指offer中有很多的关于链表的操作,现总结如下:(对于单向链表,由于不能回溯,故比双向指针要更稍微复杂些)#include #include using namespace std;//单链表的数据结构struct List_node{ char data; List_node *next;};class List_solution{public: //创建链表
2016-07-16 17:04:15 504
原创 mysql中char和varchar的区别
数据库中用的最多的还要数字符的操作的了,mysql中两个比较重要的数据类型:char 和varchar,两者在使用的时候还是有区别的:1、首先,char型的数据是定长度的,当我们定义一个数据类型时:name char(5) ,表示name这个变量时刻是占用5个字节,但如果我们用name varchar(5) 来定义是表示最大长度为5,但实际可能占用不到这么多,因此varchar相对于char来
2016-07-13 16:04:58 592
原创 c++重载与模板
一、 模板是泛型编程的重要支持,函数和类模板在STL中运用的非常广泛,首先谈谈c中的函数重载和c++中的函数模板的区别:1、首先,函数重载是函数名相同,但参数个数和类别不同,如果增加参数个数和参数型别就要重新编写相应的重载函数,而相对于函数模板就比较灵活,我们只要编写一个函数模板,编译器在编译是就会根据参数类型特例化出相应的版本,而且模板支持可变参数(template,..代表0个或多个参数)
2016-07-12 19:48:05 3338 1
原创 重建二叉树
对二叉树有点了解的都知道,通过中序和任何遍历都可以唯一构建好一个二叉树,所以我们可以以中序和前序为例,来重建一棵二叉树:#include using namespace std;struct tree_node //树节点的结构体{ int m_data; tree_node *m_cright; tree_node *m_cleft;};class solution{
2016-07-09 15:15:17 414
原创 deque 迭代器失效的问题详解
今天在看STL源码的时候,无意写了如下的代码,发现程序崩溃了: deque::iterator iter=d.begin(); d.insert(iter,5); d.insert(iter,6); //崩溃,迭代器失效了之前一直没有留意这个问题,后来结合源码和查找资料,得到如下的结论:插入操作:1、在队前或队后插入元素时(push_back(),pus
2016-07-04 21:58:48 5580 4
原创 c++类成员变量的初始化顺序以及特殊成员的初始化方法规则
说到类的成员变量的初始化顺序,对于初学者很多容易混淆其顺序,以为简单的按初始表来初始化,其实不然,现在我来详细讲解下类的初始化顺序:首先由简单开始:class people{public: people():j(1),i(j) { }public: int i; int j;};这个类的初始化结果是什么?也许有人会说结果为:先初始化j=1,再用j初始化i=j=1;所以最
2016-07-03 15:43:09 1616 1
原创 设计模式:单件模式
保持单一对象有时非常必要,尤其是资源类,比如窗口资源,注册表等等,所谓的单件模式的定义是:确保一个类只有一个实例,并提供一个全局的访问点。其类图虽说比较简单,但单例模式还是有很多陷阱的。 首先,给出单例模式的经典的懒汉式写法:(懒汉式:需要实例对象时才创建,延迟创建)class single{ private static single uniqueinstance;
2016-07-02 15:49:16 374
原创 二叉树遍历算法
二叉树的遍历是个比较常用且经典的问题,它有递归和非递归的方式来实现三种遍历方式,递归的方式相对比较简单,这里主要用非递归的方式实现二叉树的三种遍历方式。#include #include #include using namespace std;//节点结构体 struct node{ char data;//数据域 node *left_child;//左孩子
2016-06-30 22:06:11 346
转载 如何远程连接mysql数据库
转载地址:http://blog.csdn.net/itchiang/article/details/9021747第一:更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称'%'。 或者新加条记录,“host” 项为要访问的ip地址,并授权。重启mysql服务。 第二:在系统防火墙添加例外端口:3306,并允许例外。 错误提示: E
2016-06-28 22:14:02 481
转载 c++string类的常用方法详解
大部分程序都要频繁地对字符串进行操作,而c++的string类对字符串进行了很强大的封装,方便我们使用,但我常常忘了一些函数的用法,故查找文章,转载过来,供查找用。要想使用标准C++中string类,必须要包含#include // 注意是,不是,带.h的是C语言中的头文件using std::string;using std::wstring;或using names
2016-06-28 21:12:10 2380
原创 在VS2012中创建一个MFC动态链接项目(.dll)后,编译出现一大堆莫名其妙的错误的解决方法
今天在做一个简单的读取文件的接口界面的时候,用VS2012新建了一个.dl lMFC项目,编写好代码无任何错误后,编译链接,结果这时问题出现了:本来好好的代码却出现一大堆乱七八糟的错误:error C2146: 语法错误: 缺少“;”(在标识符“HwndMSWheel”的前面) 等等一系列莫名其妙的错误!之后我又把相同的代码移植到VS2013中来测试,结果没有问题(MFC了解比较浅,至今不解为何出
2016-06-21 19:56:30 1824
原创 “DllMain 已经在 MSVCRTD.lib(dllmain.obj) 中定义以及找到一个或多个多重定义的符号”错误的解决方法
今天在做一个界面接口的时候(MFC的dll项目),一切准备妥当后,一编译就出现了:1、错误 1 error LNK2005: DllMain 已经在 MSVCRTD.lib(dllmain.obj) 中定义。2、错误 2 error LNK1169: 找到一个或多个多重定义的符号 。这两个莫名其妙的错误,我查找找了资料:很多人多说是因为在.h头文件中定义了变量,然后多次包含的过程中导致了变量的重复
2016-06-20 19:50:53 3510
原创 字符串末尾自动加上'\0'的情况
之前一直都有一个问题困扰着我,就是我们知道C风格的字符串在用strlen求长度时只会遇到'\0'结束,如果一个字符数组全部填满了,而在末尾没有加上'\0'就会出现结果不定的现象(一直读取当前内存后面的数据,直到遇到'\0'时结束!);但当什么时候字符串后面编译器会自动加上结尾符呢?测试代码如下:int main(){ /*my_err_record my_error;
2016-06-17 20:19:07 14356 4
原创 vs2012编译器c++存储内存对齐情况详解
??????????????????????????????????????????????????????????sizeof???????????????????????????????? ???????????????????8??????????tianji
2016-06-15 22:54:57 4071
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人