C/C++
文章平均质量分 81
松狮MVP
这个作者很懒,什么都没留下…
展开
-
泛型算法例子
#include#include#include#include#includeusing namespace std;void output(string s){cout << s << " ";}void elimDups(vector &words)//删除相同单词,并进行排序{sort(words.begin(), words.end());//排序auto unique_words =原创 2015-07-08 09:37:07 · 567 阅读 · 0 评论 -
C语言二维数组的内存结构图与Java二维数组的内存结构图
C语言二维数组的内存结构图与Java二维数组的内存结构图。。。。。。原创 2015-10-25 00:36:47 · 3526 阅读 · 0 评论 -
C++对C语言的扩展
1、C++对C的扩展: (1)C面向过程加工的是一个个函数,C++面向对象加工的是一个个类; (2)为什么要写成员函数?class MyCircle{public :void setR(double d){m_r = d;}/*double getS() //成员函数{s = 3.14*m_r*m_r;retu原创 2016-04-28 09:32:24 · 920 阅读 · 0 评论 -
函数指针基础及应用(正向调用、动态库升级成框架)
1、数组指针2、函数指针函数指针做函数参数的思想精华——调用者任务的人 和 实现任务的人 解耦合(回调函数的本质:提前做了一个协议的约定(把函数的参数、函数返回值提前约定))(C++编译器通过多态的机制(提前布局vptr指针和虚函数表,找虚函数入口地址来实现))2)函数指针应用(1)——正向调用3)函数指针应用(2)——动态库升级成框架原创 2015-09-17 19:38:56 · 2038 阅读 · 1 评论 -
深入分析深拷贝(Memberwise Copy)和浅拷贝(Bitwise Copy)
深拷贝、浅拷贝基础:http://blog.csdn.net/songshimvp1/article/details/48244599*********************************************************************************************************************************转载 2016-04-26 11:05:15 · 2094 阅读 · 0 评论 -
C++技术点积累(4)——继承、多态、抽象类
C++技术累积(4):1、继承:1)对于单个类来说,访问修饰符:public 修饰的成员变量 方法 在类的内部 类的外部都能使用;protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ;其他 类的外部不能被使用;private: 修饰的成员变量方法 只能在类的内部使用 不能在类的外部;2)C++中的继承方式会影响子类的对外访问属性:publ原创 2015-09-16 19:47:09 · 1291 阅读 · 0 评论 -
C++技术点积累(2)——拷贝构造函数、深拷贝、浅拷贝
C++技术点积累:1、因为在A类外的B类是无法使用A类的private成的,但是有的时候又有这种需求(A类和B类有一些业务数据联系),一般我们可以A类中编写一些get()函数,getAx(){ return x;//把A类的成员变量甩出去},这样,我们在B类就可以调用A类的getAx()函数来使用A类的成员变量x。2、拷贝构造函数的四种调用情景(拷贝构造函数调用时机)3、深拷贝、浅拷贝原创 2015-09-07 20:55:47 · 1516 阅读 · 0 评论 -
类模板成员函数的定义、实现分离与error LNK2019的解决办法
以前一直是把类模板成员函数的定义、实现写在同一个文件中(.h)(原因),然后在调用成员函数的主函数中添加XXXX.h。今天写了一个类模板,因为成员函数过多,不想让头文件看起来过于臃肿,所以采用了.h和.cpp文件分离。结果在主函数中调用成员函数时出现了一堆error LNK2019错误。 error LNK2019: 无法解析的外部符号 "public: __thiscall X原创 2016-02-29 20:22:56 · 1730 阅读 · 2 评论 -
企业链表模型——业务实体和底层链表算法分离
LinkList.h:#ifndef _MYLINKLIST_H_#define _MYLINKLIST_H_typedef void LinkList;typedef struct _tag_LinkListNode{ struct _tag_LinkListNode *next;}LinkListNode;LinkList* LinkList_create();int原创 2016-02-29 17:20:38 · 1654 阅读 · 2 评论 -
C++技术点积累(6)——异常处理、输入和输出流
C++技术点积累:1、异常处理机制:2、输入和输出流:原创 2015-09-20 15:51:35 · 1362 阅读 · 0 评论 -
C++技术点积累(5)——泛型编程(函数模板、类模板)
1、函数模板——本质:类型参数化1)使得程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递。总结: 模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。.....2、类模板.....原创 2015-09-18 17:12:23 · 1190 阅读 · 0 评论 -
二叉树递归遍历中的return
今天瞄到树递归遍历,就多瞄了两眼,没想到一瞄瞄出了自己的尴尬!直接看代码:#include#includetypedef struct BiTNode{ int data; BiTNode *lChild, *rChild;}BiTNode;typedef struct BiTNode* BiTree;void inOrder(BiTree tree){ if原创 2016-03-02 11:41:33 · 3228 阅读 · 1 评论 -
error LNK2038、error LNK1123
error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800”问题描述:在用VS2013编译时出现下面的错误error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800”error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800”转载 2015-11-23 19:55:44 · 1505 阅读 · 0 评论 -
设计模式概览
一、UML基础UML(United Modeling Language, 统一建模语言): 是一种基于面向对象的可视化建模语言; UML 采用一组形象化的图形(如类图)符号作为建模语言, 使用这些符号可以形象地描述系统的各个方面;UML 通过建立图形之间的各种关系(如类与类之间的关系)来描述模型;UML 中的关系主要包括 4 种:关联关系(association);依赖关系(dep原创 2015-10-08 17:20:00 · 1003 阅读 · 0 评论 -
设计模式概览续(结构型模式)
上一篇介绍了几种创建型模式——单例模式、简单工厂模式,多态工厂模式、抽象工厂模式、建造者模式、原型模式(prototype),接下来介绍结构型模式——代理模式、装饰模式、适配器模式(adapter)、组合模式、桥接模式(bridge)、外观模式(facade)、享元模式(flyweight)。 上述介绍了结构型模式——代理模式、装饰模式、适配器模式(原创 2015-10-10 14:50:48 · 908 阅读 · 0 评论 -
C++之输入(cin)详解
1、cin: 输入操作的原理,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因! ci原创 2016-04-21 15:58:49 · 3974 阅读 · 1 评论 -
C++技术点积累(3)——对象初始化列表、运算符重载
C++技术累积:1、构造函数的对象初始化列表——初始化列表先于构造函数的函数体执行原因:1)、必须这样做:如果我们有一个类成员(A类),它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,就无法初始化A类的对象(成员),也就无法确定该类本身的内存空原创 2015-09-16 19:46:36 · 1694 阅读 · 0 评论 -
斐波那契数列、跳台阶、变态跳台阶、矩形覆盖
#include#includeusing namespace std;//9、斐波那契数列class Solution {public: int Fibonacci1(int n) { /* *第一种解法:递归————从上往下计算,重复计算太多,效率太低,不能满足时间要求 */ if (n == 0) return 0;原创 2016-05-07 17:20:27 · 1452 阅读 · 0 评论 -
详解struct、class中成员变量的字节对齐
字节对齐的三个准则: 1) 结构体的首地址 能够被 其最宽基本类型成员的大小 所整除; 2) 结构体每个成员 相对于 结构体首地址的偏移量 都是 系统要求字节对齐位数 或者 该成员大小的整数倍,如有需要,编译器会在成员之间加上填充字节; 3) 结构体的总大小 为结构体 最宽基本类型成员大小 的整数倍,如有需要,编译器会在最末一个成员之后加上填充字节。原创 2016-04-17 15:40:08 · 3472 阅读 · 0 评论 -
C++技术点积累(8)——STL之算法汇总
C++技术点积累(8)——STL之算法汇总:一、算法概述1)算法部分主要由头文件,和组成。 是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、反转、排序、合并等等。 体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。 中则定义了一些模板类,用以声明函数对原创 2015-09-27 16:32:42 · 1742 阅读 · 0 评论 -
详解C++类的内存分布结构
我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:(1)右键CPP文件,属性; (2)先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleCl转载 2016-04-26 19:51:48 · 3153 阅读 · 1 评论 -
操作符(运算符)重载注意事项(含模板类中<<、>>重载)
一、用 友元全局函数 或者 成员函数 重载运算符 关键区别是:成员函数有this指针,友元函数没有成员指针,传递参数的方式不同,实现代码不同。 对于:objectL op objectR 成员函数重载 解释为: objectL.operator op (objectR) ===》objectL通过this指针传递,objectR由参数obje原创 2016-08-09 22:13:16 · 1754 阅读 · 0 评论 -
《STL源码剖析》深入分析序列式容器——vector
vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。吃多少用多少。(1)vector的空间配置数据结构:iterator start; //已使用空间的头iterator finish; //已使用空间的尾iterator end_of_storage; //目前可用空间的尾 (我们都知道一个vecto原创 2015-11-03 21:45:25 · 743 阅读 · 0 评论 -
《STL源码剖析》迭代器以及Traits设计
C++的class templates和function templates可以实现容器和算法的泛型化。难点和关键是设计这两者的胶着剂角色——迭代器——提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴漏该容器的内部数据结构和内部表述方式。迭代器是一种Samart pointer。每一种STL容器都提供有专属的迭代器!原因:为了让实现细节封装起来而不让使用者看到,所以把迭代器原创 2015-10-24 15:36:49 · 770 阅读 · 0 评论 -
懒汉式单例模式的多线程问题
懒汉式单例的多线程问题原创 2015-10-08 09:56:22 · 1520 阅读 · 0 评论 -
C++技术点积累(7)——STL之容器汇总
C++技术点积累(7)——STL(标准模板库):STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。STL的一个重要特点是数据结构和算法的分离,这种分离使得STL变得非常通用。原创 2015-09-24 09:51:34 · 1564 阅读 · 1 评论 -
大数运算和大数类
1、首先看一个小问题:整型数组、字符型数组、vector在未初始化的情况下:int main(){ int data[5]; char c[5]; vector v(5); vector v1(5); vector v2; cout << "int[]: "; for (int i = 0; i < 5; i++) { cout << data[i] << "原创 2016-08-09 22:14:36 · 1263 阅读 · 0 评论 -
《C陷阱与缺陷》笔记
这本书不是批判,而是指出易犯错误,防止编程中的陷阱和障碍。1、易犯错误类型归纳:(1)词法分析;(2)语法细节问题;(3)语义细节;(4)库函数的误用;(5)预处理器;(6)可移植性;(7)预防性程序设计;2、运算符优先级:(1)任何一个逻辑运算符的优先级低于任何一个关系运算符;(2)移位运算符的优先级比算术运算符要低,但是比关系运算符要高;原创 2016-07-13 16:59:04 · 503 阅读 · 0 评论 -
概览C++之const
1、C语言中const 与 C++中的constvoid main(){const int a = 10;int *p = (int*)&a;*p = 20;printf("%d", a);}比较上述代码在C中和C++中运行结果:C:打印20;C++:打印0;由此可见,C语言中的const是个“冒牌货”,C++中 的const是一个真正的常量。原因:C语言直原创 2016-04-10 00:06:22 · 3256 阅读 · 1 评论 -
sprintf、snprintf、sscanf、itoa、atoi、cin、string与进制转换
一、sprintf函数(是C标准库函数) 功能:把格式化的数据写入某个字符串缓冲区。 头文件:stdio.h 原型:int sprintf ( char *buffer, const char *format, [argument] …); 参数列表: buffer:char型指针,指向将要写入的字符串的缓原创 2016-08-15 17:05:40 · 2818 阅读 · 0 评论 -
基本排序算法(2)
1、堆排序:转(http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html)举例说明: 给定一个整形数组a[]={16,7,3,20,17,8},对其进行堆排序。 首先根据该数组元素构建一个完全二叉树,得到(1)初始状态: (2)构建堆的过程:原创 2016-07-11 13:19:59 · 647 阅读 · 0 评论 -
《C++沉思录》——面向对象
面向对象——数据抽象、继承、动态绑定(规模大、方便修改)原创 2016-06-04 18:33:23 · 654 阅读 · 0 评论 -
《C++沉思录》——类设计核查表、代理类、句柄类
《C++沉思录》——类设计核查表、代理类、句柄类原创 2016-06-04 14:28:35 · 2999 阅读 · 0 评论 -
设计模式概览续(行为型模式)
上一篇介绍了结构型模式——代理模式、装饰模式、适配器模式(adapter)、组合模式、桥接模式(bridge)、外观模式(facade)、享元模式(flyweight)。接下来介绍行为型模式——模板模式(template)、命令模式(command)、责任链模式、策略模式、中介者模式(mediator)、观察者模式(observer)、备忘录模式(mememto)、访问者模式(visitor)、状原创 2015-10-11 13:47:50 · 1187 阅读 · 0 评论 -
C++技术点积累(9)——补充
1、三目运算符C语言中的三目运算符:#include"stdio.h"void main(){ int a = 10; int b = 15; int z = (a > b ? a : b); printf("z:%d", z); (a > b ? a : b) = 20; //error:错误 1 error C2106: “=”: 左操作数必须为左值 pr原创 2015-09-28 16:41:37 · 733 阅读 · 0 评论 -
显示转换static_cast、const_cast、reinterpret_cast、dynamic_cast详解
显示转换static_cast、const_cast、reinterpret_cast、dynamic_cast转载 2015-08-18 19:48:02 · 843 阅读 · 0 评论 -
二进制文件与文本文件
1、C语言中缺省是按照文本方式打开文件。2、二进制文件和文本文件(1)文件是在计算机内存中以二进制表示的数据在外部存储介质上的另一种存放形式。(2)文件通常分为二进制文件和文本文件。(3)二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。(4)文本文件(也称为ASCII文件):它原创 2015-08-28 11:30:38 · 1147 阅读 · 0 评论 -
二级指针用法示例
1、二级指针的第一种用法:指针数组2、二级指针的第二种内存模型:二维数组3、二级指针的第三种内存模型:扔开C编译器,手工打造二维内存4、总览二级指针的三种内存模型:5、三种内存模型综合演练:原创 2015-08-27 17:31:44 · 1806 阅读 · 0 评论 -
C语言提高之指针初步
1、指针也是一种数据类型 指针是一种数据类型,是指它指向的内存空间的数据类型; *号表示 操作 指针所指向的内存空间中的值; *p相当于通过地址(p变量的值)找到一块内存;然后操作内存;*p放在等号的左边赋值(给内存赋值);*p放在等号的右边取值(从内存获取值); 不断的给指针变量赋值,就是不断的改变指针变量(和所指向原创 2015-08-24 19:18:10 · 1058 阅读 · 0 评论 -
不能创建抽象基类的对象
抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层。 (1)抽象类的定义: 称带有纯虚函数的类为抽象类。 (2)抽象类的作用: 抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作。所以派生类实际上刻画了一组子类的操作接口的转载 2015-07-15 15:51:55 · 2266 阅读 · 0 评论