c++
文章平均质量分 67
monkey_D_feilong
这个作者很懒,什么都没留下…
展开
-
char字符与wchar_t字符的相互转换,以及wchar_t字符串的常用用法
今天在做word报表的自动生成时,在读取数据文档的数据插入表格的时候,因为wordSelection.TypeText(LPCTSTR * text),需要传入的是LPCTSTR型的字符串(查看定义可知这是一个WCHAR型的数据),但infile文件流没有重载“>>”运算符,所以需要转换,开始我想到的是强制转换,但强制转换的结果就是在word文档里显示的是乱码(猜测可能是因为wchar_t占两字节转载 2016-05-31 21:24:34 · 1900 阅读 · 0 评论 -
重建二叉树
对二叉树有点了解的都知道,通过中序和任何遍历都可以唯一构建好一个二叉树,所以我们可以以中序和前序为例,来重建一棵二叉树:#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 · 398 阅读 · 0 评论 -
红黑树的插入操作详解(插入调整)
c++标准库中STL的关联容器(set、multiset、map、multimap)都是用的红黑树作为底层代码,而且红黑树在快速查找的结构里面用的比较多,想比于平衡二叉树,红黑树没有那么严格的限制条件(平衡二叉树要求结点的深度之差不超过1,而红黑树则没有这个限制),虽然红黑树是一种弱化的AVL树,但在数据查找效率方面依然不必AVL差,而且由于AVL的平衡条件要求比较严格,所以,当插入一个数据时,极原创 2016-07-20 20:16:13 · 1157 阅读 · 0 评论 -
剑指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 · 670 阅读 · 0 评论 -
vs2012编译器c++存储内存对齐情况详解
??????????????????????????????????????????????????????????sizeof???????????????????????????????? ???????????????????8??????????tianji原创 2016-06-15 22:54:57 · 4050 阅读 · 0 评论 -
多线程环境下使用c++输出流和printf函数的区别
今天在学习Linux多线程编程的时候,出现了一个比较怪异的现象,在使用读写锁访问并打印数据时出现了输出数据混乱的现象,因为多线程编程大部分用的是c的函数,但由于本人对c++比较熟悉,所以习惯性地在c代码中混杂一些c++的语句,尤其是c++的输出流cout,但会出现如上的问题,后来我就测试性地把cout输出部分全部改为printf函数,其他代码没变,重新运行发现就不会出现之前的问题了,所以得到如下结原创 2016-08-18 22:30:58 · 4952 阅读 · 4 评论 -
输入输出流>>和<<操作符对字符串操作的一些问题详解
一直以来我对string和char*以及char[]在输入输出时的细节比较模糊,今天专门写了个demo把问题测试了一遍,记录如下:首先请看如下代码:char *ch="abcd";cin>>ch;cout猜猜上面会出现什么情况?没错,程序会崩溃,因为“abcd”在静态区,是不能改的,ch指针指向该区域,而cin>>操作会尝试改变该区域的数据,修改常量当然会崩啊,为了验证自己的猜原创 2016-08-10 17:48:43 · 574 阅读 · 0 评论 -
基类和派生类内存详解
昨天室友问了我一个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 · 2151 阅读 · 0 评论 -
c++程序连接及装载过程详解
今天看到一位老师写的精彩的关于c++程序的编译和链接过程的详细过程的介绍,看完之后很多问题都豁然开朗,我也试着按着老师的步骤一步步跟踪了代码,学到了很多东西,所以把老师的文章原封不动的copy过来,供今后参考用(详细链接:http://tech.meituan.com/linker.html)###引言随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学转载 2016-08-13 20:53:26 · 3316 阅读 · 0 评论 -
二叉搜索树的增删查
今天把搜索二叉树的思路又理了一遍,把代码又从头到尾敲了一遍,各位看客就不要在意代码粗糙和内存溢出了,主要把插入和删除的过程理了一遍,其中比较复杂的地方就是搜索二叉树的删除,涉及了很多次的指针重新指向,比较容易晕。另外,对于二叉树,在上溯的时候要特别注意根节点这个特殊的临界状态(大部分情况把根节点的父结点指向空,也可以设一个head结点,使root和head的父结点相互指向)。最后注意null结点不原创 2016-09-05 16:48:44 · 546 阅读 · 0 评论 -
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 · 927 阅读 · 0 评论 -
剑指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 · 468 阅读 · 0 评论 -
c++string类的常用方法详解
大部分程序都要频繁地对字符串进行操作,而c++的string类对字符串进行了很强大的封装,方便我们使用,但我常常忘了一些函数的用法,故查找文章,转载过来,供查找用。要想使用标准C++中string类,必须要包含#include // 注意是,不是,带.h的是C语言中的头文件using std::string;using std::wstring;或using names转载 2016-06-28 21:12:10 · 2344 阅读 · 0 评论 -
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 · 1595 阅读 · 1 评论 -
剑指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 · 340 阅读 · 0 评论 -
剑指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 · 391 阅读 · 0 评论 -
字符串末尾自动加上'\0'的情况
之前一直都有一个问题困扰着我,就是我们知道C风格的字符串在用strlen求长度时只会遇到'\0'结束,如果一个字符数组全部填满了,而在末尾没有加上'\0'就会出现结果不定的现象(一直读取当前内存后面的数据,直到遇到'\0'时结束!);但当什么时候字符串后面编译器会自动加上结尾符呢?测试代码如下:int main(){ /*my_err_record my_error;原创 2016-06-17 20:19:07 · 14299 阅读 · 4 评论 -
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 · 5523 阅读 · 4 评论 -
c++重载与模板
一、 模板是泛型编程的重要支持,函数和类模板在STL中运用的非常广泛,首先谈谈c中的函数重载和c++中的函数模板的区别:1、首先,函数重载是函数名相同,但参数个数和类别不同,如果增加参数个数和参数型别就要重新编写相应的重载函数,而相对于函数模板就比较灵活,我们只要编写一个函数模板,编译器在编译是就会根据参数类型特例化出相应的版本,而且模板支持可变参数(template,..代表0个或多个参数)原创 2016-07-12 19:48:05 · 3317 阅读 · 1 评论 -
“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 · 3448 阅读 · 0 评论 -
在VS2012中创建一个MFC动态链接项目(.dll)后,编译出现一大堆莫名其妙的错误的解决方法
今天在做一个简单的读取文件的接口界面的时候,用VS2012新建了一个.dl lMFC项目,编写好代码无任何错误后,编译链接,结果这时问题出现了:本来好好的代码却出现一大堆乱七八糟的错误:error C2146: 语法错误: 缺少“;”(在标识符“HwndMSWheel”的前面) 等等一系列莫名其妙的错误!之后我又把相同的代码移植到VS2013中来测试,结果没有问题(MFC了解比较浅,至今不解为何出原创 2016-06-21 19:56:30 · 1810 阅读 · 0 评论 -
中缀表达式转前缀和后缀表达式
之前笔试中国电信IT研发中心的时候,遇到了几个前、中、后缀表达式的相互转换,当时忘得差不多了,今天好好把该方面的知识好好复习,并把相关代码和思路自己缕了一遍:将中缀表达式转换为前缀表达式:遵循以下步骤:(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;(2) 从右至左扫描中缀表达式;(3) 遇到操作数时,将其压入S2;(4) 遇到运算符时,比较其与S1栈顶运算符的优原创 2016-10-06 22:23:49 · 909 阅读 · 0 评论