自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xiaobai

转载请注明

  • 博客(15)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++模板实现两个不同类型的数据相加函数

1、最简单的情况:template<class T> T Add(const T& a, const T& b) { return a + b; } 缺点是不能够处理不同类型的数据,例如Add(100, 100.0f);2、第二种情况:template<typename T1, typename T2> T1...

2019-02-24 22:41:47 8568

原创 STL中常见容器排序接口详解

一、sort算法面试题:sort算法使用的是什么排序算法?稳定吗?如果回答是快速排序,答案不完整,而且还会引来一下问题:数据量大和数据量小都适合用快速排序吗? 快速排序的时间复杂度不是稳定的nlogn,最坏情况会变成n^2,怎么解决复杂度恶化问题? 快速排序递归实现时,怎么解决递归层次过深的问题? 递归过深会引发什么问题? 怎么控制递归深度?如果达到递归深度了还没排完序怎么...

2019-02-24 17:17:35 339

原创 vector迭代器失效

迭代器失效:迭代器就是把指针的一些操作进行重载,所以迭代器失效可以认为指针的失效,也即是野指针。vector是一个序列式容器,内存是连续存储的。所以如果erase一个元素,会使得后续元素向前搬移,使得迭代器失效。不够erase函数会返回被删除元素的下一个元素的迭代器。除此之外insert一个元素,也可能失效。insert分两种情况:(1)如果vector存储空间还有,也就是够一个元素插入,...

2019-02-21 22:57:42 157

转载 vector的内存释放

vector : C++ STL中的顺序容器,封装数组1. vector容器的内存自增长 与其他容器不同,其内存空间只会增长,不会减小。先来看看"C++ Primer"中怎么说:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难...

2019-02-21 22:24:31 232

原创 模拟operator new 和 operator delete实现内存泄漏追踪器和内存池

内存泄漏追踪器operator new 和 operator delete是两个全局函数,new/delete底层调用它们,所以我们可以模拟实现这两个全局函数,起到追踪内存的创建和销毁。已知优先调用:类成员函数>全局函数>系统函数;class Date{private: int _year; int _month; int _day;public: Date(...

2019-02-17 19:59:19 254

原创 IO多路转接select——文件描述符就绪条件

select文件描述符状态集包含:可读文件描述符集合、可写文件描述符集合和异常文件的描述符集合读集合就绪1. 在socket内核当中,接收缓冲区中的字节数,大于等于低水位标记,此时可以无阻塞的读取数据,并且返回值大于0;2. socket中对端关闭连接,此时进行读,返回值为0;3. socket中监听套接字有新的连接到来;4. socket上有未处理的错误,此时我们可以使用ge...

2019-02-17 14:57:14 400

原创 常见排序算法

插入排序插入排序是一个数据向已经有序的数组中插入数据。见下图 插入排序时间复杂度:最好情况是接近有序O(N),最坏情况下是逆序O(N^2)。优化:可以采用二分查找查找元素应该插入的位置。 //插入排序//最好O(N)//最坏O(N^2)//可以采用二分查找void InsertSort(std::vector<int> &v){ int end =...

2019-02-15 23:06:18 163

原创 海量数据处理

当我们拿到一个题是海量数据问题,内存不能够同时处理,首先考虑特殊数据结构能否处理比如:位图和布隆过滤器。如果不能处理我们一般需要把大的文件哈西切割为几份,在分别处理。哈希切割——top K问题 给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?如何找到top K的IP?如何直接用Linux系统命令实现? 我的思路:100G大小的文...

2019-02-14 17:50:45 129

原创 搜索结构——布隆过滤器

引:40亿个字符串集合,快速判断某个字符串是否存在 位图适用于整形,布隆过滤器适用于任何类型;什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,...

2019-02-11 18:06:00 392

转载 算法 - 牛顿迭代法求平方根

Q: Implement int sqrt(int x).Compute and return the square root of x.A:这里给出两种实现方法:一是二分搜索,二是牛顿迭代法。1. 二分搜索对于一个非负数n,它的平方根不会小于大于(n/2+1)(谢谢@linzhi-cs提醒)。在[0, n/2+1]这个范围内可以进行二分搜索,求出n的平方根。in...

2019-02-11 11:58:47 1111

原创 搜索结构——哈希

哈希函数设计:(1)直接定制法(2)除留余数法(3)数学分析发哈希冲突:不同的关键码通过相同的哈希函数计算得到相同的哈希地址称为哈希冲突。哈希冲突一个可能原因就是哈希函数设计不合理;如果哈希函数设计巧妙,哈希冲突可能性越低,但是不能够避免哈希冲突。哈希冲突的处理:闭散列和开散列闭散列闭散列也叫开放地址法,当发生哈希冲突时,如果哈希表未被装满,说明哈希表中还有空位置,那么可以吧ke...

2019-02-10 19:31:24 180

原创 搜索二叉树转化为排序双向链表

题目描述:输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现。题目分析:要实现一个排序的双向链表,,首先想到的就是中序遍历。所以出现以下两种遍历修饰。  代码:Node *g_prev = nullptr;void SBTreeToLink(Node *root){ if(r...

2019-02-07 14:10:19 196

原创 搜索结构——二叉搜索树

一、二叉搜索树的概念(1)若它的左子树不为空,则左子树上所有节点的值都小于根节点值(2)若它的右子树不为空,则右子树上所有节点的值都大于根节点值(3)它的左右子树都是二叉搜索树从概念可以看出二叉搜索树的中序遍历是有序排列的,而且没有重复元素。在实际应用当中也是根据这一特点是否采用二叉搜索树。二、二叉搜索树的操作查找操作如果根节点不为空:(1)如果根节点值等于key,返回t...

2019-02-05 21:40:24 215

原创 基于TCP协议实现在线翻译——项目构思

在线翻译其实可以理解为查找(key——value),当我们手里面有一个单词只需要在单词库查找。如果找到对应返回翻译,否则,单词拼写错误或者不存在该单词。那么这个单词库该怎么设计?(1)采用顺序表存储每个单词,然后查找,但是顺序表查找效率低(2)采用二叉搜索树存储每个单词,查找效率高。(3)二叉搜索树缺点就是同一个关键码集合插入顺序不一样,可能得到不同的搜索二叉树,所以可能退化为单支树。如果是单支树...

2019-02-05 13:41:18 286 2

原创 基于TCP协议实现程序员计算器

基于TCP协议实现程序员计算器开发技术:Linux、Vim、C++、g++、Makefile 项目功能:实现计算器的基本功能包括日期加减、数值加减乘除等操作、进制转化等 技术特点:TCP套接字、序列化与反序列化、线程池、生产者与消费者模型、日期类、vector等...

2019-02-05 13:36:51 457

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除