C++
文章平均质量分 77
东方潮汐
在探索前进的路上
展开
-
C++进阶 必读书籍
(一)语言入门:《C++ Primer》最新版本:第三版(第四版国外已上架, 国内一些网上书店也在预订中)适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是 好事。《The C++ Programming Language》/《C++程序设计语言》最新版本:第三版特别版简称 TC++PL,有其他语言的丰富经验转载 2014-12-29 21:53:32 · 487 阅读 · 0 评论 -
C++二叉查找树实现过程详解
什么是二叉查找树在数据结构中,有一个奇葩的东西,说它奇葩,那是因为它重要,这就是树。而在树中,二叉树又是当中的贵族。二叉树的一个重要应用是它们在查找中的应用,于是就有了二叉查找树。 使二叉树成为一颗二叉查找树,需要满足以下两点:对于树中的每个节点X,它的左子树中所有项的值都要小于X中的项;对于树中的每个节点Y,它的右子树中所有项的值都要大于X中的项。二叉查找树的基本转载 2015-06-08 22:04:36 · 471 阅读 · 0 评论 -
如何在C/C++中动态分配二维数组
在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较低。如何申请连续的二维数组了?本文将分别三个方面讲解:一.动态申请列大小固定的二维数组二.C语言中动态申请连续的二维数组三.C++语言中动态申请连续的二维数组 一.动态申请列大小固定的二维数组转载 2015-06-08 21:45:48 · 379 阅读 · 0 评论 -
C++ 的社会繁衍
把 C++ 想象成人类社会。访问权限、继承、友元将无比真实的反应人类社会中的种种关系。一、类内部访问权限+---------+|class | --> 人+---------+|public | --> 你能干啥|protected| --> 你留下啥|private | --> 你藏了啥+---------+|friend | --> 你的圈转载 2015-07-01 22:43:53 · 342 阅读 · 0 评论 -
递归问题解决二叉树问题
二叉树是一种常见的数据结构,其是一种每个结点最多有两个子树的有序树。二叉树常被用于实现二叉查找树和二叉堆。二叉树节点定义如下:struct BinaryTreeNode{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;};1. 求二叉树中的节点个数递归解法:(1)如果二叉树为空,节点个数转载 2015-07-02 17:46:55 · 583 阅读 · 0 评论 -
在什么情况下Java比C++快?
本文由 ImportNew - hackingwu 翻译自 quora。欢迎加入翻译小组。转载请见文末要求。回复者:Cameron Purdy,Oracle中间件高级工程师。这是根据我同时使用C++和Java工作超过20年所学到的,其实使用Java比C++还要早几年:1、根据我的经验,当你把优化过的C++代码转换成Java代码,代码的速度会慢大约三倍。2、根据我的经验,把Java代转载 2015-07-01 23:03:12 · 377 阅读 · 0 评论 -
常用的STL查找算法
《effective STL》中有句忠告,尽量用算法替代手写循环;查找少不了循环遍历,在这里总结下常用的STL查找算法;查找有三种,即点线面:点就是查找目标为单个元素;线就是查找目标为区间;面就是查找目标为集合;针对每个类别的查找,默认的比较函数是相等,为了满足更丰富的需求,算法也都提供了自定义比较函数的版本;单个元素查找find() 比较条件为相等的查找f转载 2015-07-04 23:04:41 · 422 阅读 · 0 评论 -
处理new分配内存失败情况
转自:http://www.51testing.com/html/70/n-827070.html在C++语言中,我们经常会使用new给一个对象分配内存空间,而当内存不够会出现内存不足的情况。C++提供了两中报告方式: 1、抛出bad_alloc异常来报告分配失败; 2、返回空指针,而不会抛出异常。 C++为什么会采用这两种方式呢?这主要是由于各大编译器公司设计C++编译器公转载 2015-09-03 18:45:48 · 1184 阅读 · 0 评论 -
汉字占用两字节在字符串中即被辨认为两个字符
一直是知道的,汉字占用两个字节,但写代码时很少需要汉字字符串的大小(一年来基本未用到),故对此一直没有什么实感,直到最近突然意识到占两个字节在char数组中如何表现呢?于是做了个小测试#include#includeusing namespace std;int main(void){ char a[10]; char b[10]; int i; cin >>原创 2015-09-02 17:44:17 · 1654 阅读 · 0 评论 -
模板类中重载<<和>>操作符
模板类中操作符重载问题(">"重载)在模板类中输入流“>>”和输出流“>"的重载。一、将输出流">"重载的实现写在类中#include "stdafx.h"#include using namespace std; templateclass T> class Test { public:转载 2015-10-18 21:09:24 · 688 阅读 · 0 评论 -
掌握VS2010调试 -- 入门指南
1 导言在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间。通常,debug是指发现缺陷并改正的过程。修正缺陷紧随debug之后,或者说二者是相关的。如果代码中存在缺陷,我们首先要识别造成缺陷的根本原因(root cause),这个过程就称作调试(debugging)。找到根本原因后转载 2015-10-05 00:59:52 · 527 阅读 · 0 评论 -
dependent name is not a type [关于模板类中的迭代器]
MSDN相关文档:https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=ZH-CN&k=k(C4346)&rd=true 如下一个模板类:template class CTest{public: typedef map TEMPLATE_MAP; typedef map::iterator T转载 2015-10-04 19:59:33 · 1108 阅读 · 0 评论 -
正确释放Vector的内存
作者: @_羊仔网址: http://blog.jobbole.com/37700/微博上,有人提出了一个对于Vector内存泄露的疑问。博主采用 Vector存储一些数据,但是发现在执行 clear() 之后内存并没有释放,于是怀疑产生了内存泄露。随后有人回复:“vector 的 clear 不影响 capacity , 你应该 swa转载 2015-10-14 11:36:41 · 444 阅读 · 0 评论 -
for循环嵌套的效率
有人说,两个嵌套的for循环,把循环次数多的放在里面,效率会比较高。这是个老话题了。网上的讨论很多。我记得我第一次见到这个问题的时候还在上高中。今天就简单的总结一下吧。先上代码:void test1(){ long dt = DateTime.Now.Ticks; for (int i = 0; i { for (int j = 0; j {转载 2015-12-24 09:44:48 · 5096 阅读 · 0 评论 -
高效使用 STL
来自:大CC链接:http://www.cnblogs.com/me115/p/4596543.html仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍;熟悉以下条款,高效的使用STL;当对象很大时,建立指针的容器而不是对象的容器1)STL基于拷贝的方式的来工作,任何需要放入STL中的元素,都会被复制;这也好理解,STL工作的容器是在转载 2016-04-10 20:46:24 · 728 阅读 · 0 评论 -
酒店房间和 C++ 局部变量的作用域
问题:Can a local variable’s memory be accessed outside its scope? 有一段局部变量的内存,可以从其范围之外访问它么?如下代码:int *foo(){int a = 5;return &a;}int main(){int *p =转载 2015-05-19 23:16:36 · 536 阅读 · 0 评论 -
刨根问底:C++中浮点型变量(float, double)的比较问题。
首先,让我们先来看一段代码:#include #include int main(){ using namespace std; cout<<setprecision(17); float num1 = 1.1; double num2 = 1.1; if (num1 == num2) cout << "yes"<<endl; else cout转载 2015-03-14 22:19:43 · 751 阅读 · 0 评论 -
浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式。但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器转载 2015-03-14 23:25:51 · 309 阅读 · 0 评论 -
减少C++代码编译时间的方法
c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你做的工程比较大(比如二次封装chrome这类的开发),重新编译一次的时间就会浪费上班的大部分时间,这样干了一天挺累的, 但是你的老板说你没有产出,结果你被fired, 是不是很怨啊, 如果你早点看到这段文章,你就会比你转载 2015-03-20 11:54:35 · 522 阅读 · 0 评论 -
对象的消息模型
[ ―――― 感谢 Todd 同学 投递本文,原文链接 ―――― ]C++对象模型 话题从下面这段C++程序说起,你认为它可以顺利执行吗?void A_Hello_xxx(A * const this, const std::string& name) { std::cout << “hello “ << name;} 对象指针其实是作为第一个转载 2015-04-09 22:33:20 · 315 阅读 · 0 评论 -
设计模式中类的关系
在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。1. 依赖(Dependence)依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦转载 2015-04-09 23:13:48 · 252 阅读 · 0 评论 -
浅析C++多线程内存模型
在即将到来的C++1x标准中,一个重大的更新就是引入了C++多线程内存模型。本文的主要目的在于介绍C++多线程内存模型涉及到的一些原理和概念,以帮助大家理解C++多线程内存模型的作用和意义。1. 顺序一致性模型(Sequential Consistency) 在介绍C++多线程模型之前,让我们先介绍一下最基本的顺序一致性模型。对多线程程序来说,最直观,最容易被理解的执行方式就转载 2015-04-17 12:44:16 · 326 阅读 · 0 评论 -
C++二叉查找树实现过程详解
什么是二叉查找树在数据结构中,有一个奇葩的东西,说它奇葩,那是因为它重要,这就是树。而在树中,二叉树又是当中的贵族。二叉树的一个重要应用是它们在查找中的应用,于是就有了二叉查找树。 使二叉树成为一颗二叉查找树,需要满足以下两点:对于树中的每个节点X,它的左子树中所有项的值都要小于X中的项;对于树中的每个节点Y,它的右子树中所有项的值都要大于X中的项。二叉查找树的基本转载 2015-05-16 16:46:31 · 604 阅读 · 0 评论 -
面向对象设计模式的核心法则
有本经典的书叫《设计模式》,讲了经典的21种设计模式,建议大家都看看。1. 单一职责就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏。软件设计真正要做的许多内容,就是发现职责并把那些职责互相分离。转载 2015-05-16 20:00:04 · 335 阅读 · 0 评论 -
C中的继承和多态
原文出处: CODE PROJECT 译文出处:吴秦的博客 欢迎分享原创到伯乐头条1、引言继承和多态是面向对象语言最强大的功能。有了继承和多态,我们可以完成代码重用。在C中有许多技巧可以实现多态。本文的目的就是演示一种简单和容易的技术,在C中应用继承和多态。通过创建一个VTable(virtual table)和在基类和派生类对象之间提供正确的访问,我们能在C中实现继承和多转载 2015-05-16 21:16:17 · 444 阅读 · 0 评论 -
你应该知道的浮点数基础知识
原文出处: 卢钧轶的博客 欢迎分享原创到伯乐头条一个有趣的实验本文从一个有趣而诡异的实验开始。最早这个例子博主是从 Stackoverflow上的一个问题中看到的。为了提高可读性,博主这里做了改写,简化成了以下两段代码:1234567891011121转载 2015-05-16 20:13:26 · 450 阅读 · 0 评论 -
关于C++引用的一些注意点
原文出处: fusae的博客 欢迎分享原创到伯乐头条C++的引用首先跟指针的最大区别就是引用不是一个对象,而指针是一个对象;其次引用在其定义时就要初始化,而指针可以不用。12int val = 42;int &rval = val;此时rval就绑定了val,转载 2015-05-16 20:48:51 · 443 阅读 · 0 评论 -
C++程序员看过来,你会为了性能而牺牲代码简洁性吗?
原文作者Arne Mertz是一位C++狂热份子,有着丰富的开发经验。文中Arne Mertz针对简洁和性能的关系进行阐述,他认为,开发者不到万不得已时千万不要为了性能而牺牲简洁性,要学会使用工具来解决性能问题。译文如下:C++的强项之一是能写出非常高性能的代码。那么在实际中,我们该如何把握好性能处理的尺度呢?性能≠效率首先要明确的一点是我们必须把性能和效率区分转载 2015-05-16 22:27:17 · 583 阅读 · 0 评论 -
C++静态库与动态库深入研究
这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来转载 2015-05-16 22:36:49 · 395 阅读 · 0 评论 -
C++中的动态内存与智能指针
在C++中,我们通过new(在动态内存中为对象分配空间并初始化对象)和delete(销毁该对象,并释放内存)直接分配和释放动态内存。如下代码:int *pi = new int;//pi 指向一个未初始化的int有些人有这样的疑问,指针一定要new吗?其实指针和new没有什么关系。这里的new在动态内存里为对象分配了内存空间,并返转载 2015-05-16 23:16:15 · 282 阅读 · 0 评论 -
谁是真泛型
来自: SegmentFault作者:garfileo链接:https://segmentfault.com/a/1190000004171424前两天写了篇表面上是批判 C++ 泛型但实际上只是自己的一点点反思的文章,目的只是说服自己以及那些像我一样被 C++ 折磨的欲仙欲死的人,以后不要再在 C++ 这门复杂不堪的语言的太多细枝末节之处燃烧生命,只从中取出自己需转载 2016-04-10 20:47:24 · 988 阅读 · 0 评论