C++
文章平均质量分 83
Fireplusplus
前深信服员工,前鹅厂员工
展开
-
LRU缓存
有人从网络读数据,有人从磁盘读数据,机智的人懂得合理利用缓存加速数据的读取效率,提升程序的性能,搏得上司的赏识,赢得白富美的青睐,进一步走向人生巅峰~原创 2024-02-05 20:09:50 · 1634 阅读 · 0 评论 -
C++多线程打工人
为啥写这个,今天面试问到了~原创 2024-01-11 16:35:36 · 973 阅读 · 0 评论 -
浅谈-协程
协程入门转载 2023-02-19 11:33:36 · 318 阅读 · 0 评论 -
智能指针循环引用——你真的懂了吗?
起初,没有人在意这场灾难,这不过是一个指针的丢失、一个bug,一个服务器的宕机,直到这场灾难和每个人息息相关......原创 2022-12-17 14:50:39 · 2255 阅读 · 0 评论 -
c++事件总线模型
一种简单的事件总线模型。原创 2022-06-29 21:50:33 · 1650 阅读 · 0 评论 -
【C++】泛型编程基础:模板通识
测试环境:Target: x86_64-linux-gnugcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1)什么是泛型编程?为什么C++会有模板?这一切的一切都要从如何编写一个通用的加法函数说起。很久很久以前有一个人要编写一个通用的加法函数,他想到了这么几种方法:使用函数重载,针对每个所需相同行为的不同类型重新实现原创 2016-06-20 19:34:01 · 2209 阅读 · 0 评论 -
【LeetCode】Combination
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.For example,If n = 4 and k = 2, a solution is:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]思原创 2016-06-20 19:17:22 · 548 阅读 · 0 评论 -
【LeetCode】三道简单的递归问题
1.single-numberGiven an array of integers, every element appears twice except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement it原创 2016-06-19 08:52:47 · 414 阅读 · 0 评论 -
【LeetCode】sum-root-to-leaf-numbers
【题目】Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.An example is the root-to-leaf path 1->2->3 which represents the number 123.Find原创 2016-06-19 08:45:31 · 498 阅读 · 0 评论 -
C++虚函数对象模型剖析
测试环境:VS2013C++中的类对象模型有简单的,也有复杂的。今天尝试着剖析一下,以加深对继承,虚函数等的理解。从最简单的继承开始class Base{public: int b;};class Derive : public Base{public: int d;};int main(){ cout << sizeof(Derive) <<原创 2016-06-16 11:44:50 · 532 阅读 · 0 评论 -
用C++实现文件压缩
乍一听,这个文件压缩的名字貌似是很高大上的,其实,在数据结构中学完Huffman树之后,就可以理解这个东西其实不是那么的高不可攀。文件压缩所谓文件压缩,其实就是将对应的字符编码转换为另一种占据字节数少的编码来进行存储。举个栗子:有一串文本:aaaabbbccd,其中单独将这串字符存放在文件中,它所占据的将会是至少10个字节(为什么说是至少,因为还有一些必要的文件信息要保存的说)。由原创 2016-08-15 00:28:43 · 21518 阅读 · 5 评论 -
风口的猪-中国牛市--笔试题
题目描述风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。设计算法,计算你能获得的最大收益。 输入数值范围:2原创 2016-08-18 14:03:18 · 477 阅读 · 0 评论 -
哈希笔记
引言HashTable-散列表/哈希表,是根据关键字(key)而直接访问在内存存储位置的数据结构。 它通过一个关键值的函数将所需的数据映射到表中的位置来访问数据,这个映射函数叫做散列函数,存放记录的数组叫做散列表,也就是哈希表。构造哈希表的几种方法直接定址法取关键字的某个线性函数为散列地址,Hash(Key)= Key 或 Hash(Key)= A*Key + B,A、B为原创 2016-08-20 15:54:22 · 474 阅读 · 0 评论 -
从轮子造起——SGI-STL空间配置器
引言人们常说,不要从轮子重新造起,要站在巨人的肩膀上。面对扮演轮子角色的这些STL组件,我们是否有必要深究其设计原理或实现细节呢?答案因人而异。从应用的角度思考,你不需要探索实现细节(然而相当程度地认识底层实现,对实务运用有绝对的帮助)。从技术研究与本质提升的角度来看,深究细节可以让你彻底掌握一切:不是为了重温数据结构和算法,或是想要扮演轮子角色,或是想要进一步扩张别人的轮子,都可因此获得原创 2016-09-15 15:48:43 · 625 阅读 · 3 评论 -
聊天室
实现一个基于udp协议的网络群聊系统,可以完成多人的实时信息交互任务。其实就是类似于实现qq的群聊。系统环境Ubuntu 编辑器:vim 编译器:g++ 调试器:gdb 辅助编译工具:Makefile原理图首先说的是client:client要完成的功能当然首先就是数据的接收和发送了(都从server接收和发送给server),其次,作为一个client,没有一个窗口界原创 2016-09-05 12:43:08 · 618 阅读 · 0 评论 -
为什么构造函数不能是虚函数
为什么构造函数不能是虚函数?首先,构造函数是用来构造对象的;其次,我们是通过对象内存中的虚表指针来调用虚函数的。那么,在对象还没有构造好的情况下,又去哪里找虚函数呢?所以构造函数不能是虚函数。原创 2016-09-04 16:39:07 · 370 阅读 · 0 评论 -
拜访-美团校招原题
题目描述现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10原创 2016-08-26 19:03:50 · 840 阅读 · 0 评论 -
C++思维导图
总结了下学过的C++,将.xmind文件放在GitHub上:https://github.com/Fireplusplus/Code_Cpp/blob/master/C%2B%2B.xmind下面是缩略图:原创 2016-07-01 18:29:21 · 2239 阅读 · 0 评论 -
【LeetCode】Two Sum
TwoSumGiven an array of integers,find two numbers such that they add up to a specific target number.The function two Sum should return indices of the two numbers such that they add up to the原创 2016-06-30 23:17:41 · 343 阅读 · 0 评论 -
sizeof() 与 strlen()区别与联系
初学C语言时经常把sizeof()和strlen()混淆,傻傻分不清楚,想必这样傻过的人不止我一个。今天把它俩放在一起做个对比,纪念一下逝去的青春。(以下测试均在32位平台下进行)sizeof()1.这是一个操作符,不是个函数;如何证明呢?void fun(int arg){ //do nothing}int main(){ int a = 0, b =转载 2016-05-26 18:01:05 · 329 阅读 · 0 评论 -
防止头文件重复包含方法
#pargram once编译器支持(标准未定义);由编译器保证不会重复包含物理上的同一个文件条件编译#ifndefine __TEST.H__#define __TEST.H__//code#endif条件编译是标准支持的;不会重复引入同名的文件(存在不小心写错define标识符导致重复引入的问题)原创 2016-05-27 14:54:07 · 695 阅读 · 0 评论 -
C++this指针
引言C++中的非静态成员函数有一个第一个默认的参数,那就是今天要总结的this指针了。类型既然是一个指针,那么就和其它的指针一样,this指针同样有自己的类型。假设现在已经有了一个日期类,大体上如下:class Date{public: Date() { cout << "Date::Date() call" << endl; }原创 2016-05-31 10:28:16 · 623 阅读 · 0 评论 -
C++类默认成员函数与重载
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值。它是C++六个默认成员函数中的一个,不可谓不重要。下面便来总结一下构造函数的相关知识。构造函数的作用构建对象初始化类型转换(单参才能转换)构造函数的特点没有返回值,并且不能指定返回值类型函数名与类名相同创建对象是由编译器自动调用(在对象生命周期内原创 2016-05-29 20:05:53 · 1891 阅读 · 0 评论 -
C/C++中static关键字详解
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制 如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在转载 2016-05-31 11:00:36 · 450 阅读 · 0 评论 -
C/C++中const关键字详解
为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名 常对象: 类名 const 对象名 常成员函数: 类名::fun(转载 2016-05-31 11:12:13 · 325 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2016-05-31 11:13:55 · 336 阅读 · 0 评论 -
C/C++struct与C++struct/class关键字详解
C/C++中的structC中的struct只是一个简单单单结构体,其中只能声明变量,而不能声明函数,而C++中的struct中却可以有函数。C++中struct成员默认访问权限为public,这是为了兼容C。在C中没有访问权限这一说。C++中的struct/class1。 字面上的区别在字面上struct是structure的缩写,通常叫做“结构体”,在C语言里用于将原创 2016-05-31 11:51:28 · 1978 阅读 · 0 评论 -
C++的4种类型转换关键字及其特点
转载自:http://blog.sina.com.cn/s/blog_4b20940201013ryp.html1 reinterpret_cast'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体的地址值作为整数值?)这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的转载 2016-04-24 20:00:05 · 313 阅读 · 0 评论 -
C语言inline详细讲解
本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源转载 2016-06-01 16:41:53 · 369 阅读 · 0 评论 -
malloc/calloc/realloc/free与new/delete对比
C动态申请内存函数:函数原型:void *malloc(size_t size);函数功能:申请size个字节的内存空间,返回该段空间的首地址,该空间里面的东西是随机值。返回值:始终是void*,申请成功,返回空间的首地址,否则返回NULL,所以使用这个函数一定要对返回值进行判断。函数原型:void *calloc(size_t num, size_t size);函数原创 2016-06-02 19:41:41 · 742 阅读 · 0 评论 -
extern "C" 用法解析
文/JasonDing(简书作者)原文链接:http://www.jianshu.com/p/5d2eeeb93590引言C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。extern "C"的主要作用就是为了能够正确实现C++代码调用转载 2016-05-23 14:07:32 · 1615 阅读 · 0 评论 -
C++指针与引用
引言C++中的指针沿用自C语言,这没有什么可说的。C语言中并没有引用这个概念,那么为什么C++中要引入这么一个概念呢?存在必有其道理,还是先来分析一下这两者的区别吧。指针提起指针那可是C语言中的一把大宝剑,进可杀人,退可伤己。它用法也是多种多样,比如:一个简单的交换函数void Swap(int a, int b){ int tmp = a; a =原创 2016-05-22 17:08:37 · 804 阅读 · 0 评论 -
gdb在汇编指令级调试程序
方法很多,掌握一种就好:(前提:编译时加 -g 选项)在gdb调试界面输入命令:display /ni $pc 在每行源程序后面显示n行汇编指令(n换成想要的显示的行数,如display /3i $pc)调试方法:之前程序级中调试的下一步 n 对应 现在的 ni,之前的 s 对应现在的 si,其余指令不变。原理:display每执行一条语句打印对应寄存器或变量的值;/ni 将机原创 2016-06-11 09:38:33 · 1270 阅读 · 0 评论 -
浅析C++继承与派生
测试环境:Target: x86_64-linux-gnugcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1)定义要分析继承,首先当然要知道什么是继承:继承是面向对象程旭设计中使代码可以复用的最重要的手段,它允许程序员在原有类特性的基础上进行扩展,增加功能。这样产生的新类,就叫做派生类(子类)。继承呈现了面向对象程原创 2016-06-11 10:44:07 · 15596 阅读 · 5 评论 -
C++多态深度剖析
测试环境:Target: x86_64-linux-gnugcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1)什么是多态?多态一词最初来源于希腊语,意思是具有多种形式或形态的情形,当然这只是字面意思,它在C++语言中多态有着更广泛的含义。这要先从对象的类型说起!对象的类型有两种:原创 2016-06-12 17:34:39 · 2213 阅读 · 0 评论 -
C/C++ typedef 用法小结
第一、四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽转载 2016-04-08 13:33:38 · 364 阅读 · 0 评论