C++
文章平均质量分 65
宇哲_安菲尔德
这个作者很懒,什么都没留下…
展开
-
C++命名空间
好久没写博客了,现在也开始了C++的学习,最近一个半月非常颓废,没有好好编程,旧的结束,代表着新的开始,大三了,不可蹉跎岁月!!!今天我们首先从C++最基础的东西开始,大二第一个学期接触过C++,可惜当时学的真是云里雾里,现在自己一步步进行摸索,感觉好多都是恍然大悟的样子。多余的就不多说了,开始今天的学习。首先我们来讲下命名空间。命名空间对于命名空间,这是一个C中没有的东西,首先这里要提出一个问题,原创 2016-07-18 09:51:13 · 1214 阅读 · 0 评论 -
关于队列和栈的几道面试题
关于队列和栈的几道面试题今天来说几道简单的栈和队列相关的几道面试题:1 . 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O (1 )第一道题,我们需要分析,我想一般的思维肯定是想到,开辟一块空间,进行保存最小值,这种方法也是大家通常地一下就可以想到的。但是在这里会有一个问题,就是如果你的最小值在栈顶,当你pop了栈顶以后,下面的数据中最小的元素就原创 2016-09-18 16:00:49 · 2510 阅读 · 2 评论 -
C++之类型萃取技巧
在我们前面写顺序表的时候会产生一个问题。使用类型萃取的原因就是当你的顺序表是自定义类型,我们进行顺序表增容的时候,这个时候会出现一个问题,比如string类型,这个类型中有一个_buf与_ptr,当储存少于16个的时候这时会储存在_buf当中的,如果多于16个,那个会单独开辟空间,进行储存,这时拷贝的时候就是拷贝过去这个储存的地址而已,所以这样调用析构函数的时候,当增加容量的时候,这个时候会把储存s原创 2016-09-10 12:13:31 · 1164 阅读 · 1 评论 -
海量数据分析问题总结
1)给⼀个超过100G⼤⼩的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?第一题:首先我们的思路就是利用哈希进行文件的切分,我们把100G大小的logfile分为1000份,那么下来差不多没一个文件就是100M左右,然后再利用哈希函数除留余数的方法分配到对应的编号文件中,然后得出每个文件中出现次数最多的IP,然后堆排序取得这1000个ip中出现次数最多的。2)与上题原创 2016-11-10 13:36:13 · 1800 阅读 · 1 评论 -
归并法外排序—海量数据排序
1.外归并排序讲完了内排序,我们来了解一下,外归并排序,外归并排序一般是应对于数据量非常大的数据,这些数据放在硬盘上,无法一次性的放到内存上。所以,我们通常采用的思路对于这些数据就是进行切分,然后对切分出来的文件进行排序。在排序的时候,小文件我们采用快排来排序,如果是大文件,我们就从两个文件中一个一个读取,然后进行归并排序,放入合并以后的文件当中,最后最大的文件就是排序以后的结果。外排序是指在排序期原创 2016-11-29 20:10:55 · 3195 阅读 · 1 评论 -
二叉树——面试题
1.求二叉树中最远的两个节点的距离在这我们首先来分析思路,对于最远的两个节点,在这会有两种情况。1)如果root为NULL,那么这是一颗空树。空树的最远子节点距离和高度均为零。 2),如果root非空,最大距离要么是左子树中的最大距离,要么是右子树中的最大距离,要么是左子树节点中到根节点的最大距离+右子树节点中到根节点的最大距离,同时记录左子树和右子树节点中到根节点的最大距离。 示例代码://求原创 2016-11-30 12:33:21 · 1257 阅读 · 0 评论 -
STL剖析——空间配置器
近来闲来无趣,看了下STL的空间配置器。首先恭喜我入坑,网上无数的人都在剖析这STL的空间配置器,所以,刚好,今天我也加入了这个团队,这个应该是我目前看到的比较完整架构的一个源码了吧,希望能提示我的水平,毕竟设计的很好。在这里特别说下,没有操作系统的知识,所以在这里的线程和锁的这些问题,我们一概不讨论STL的空间配置器,就是一个为了给容器进行分配内存和管理内存的东西,容许我盗几张图给大家说明。 这原创 2016-12-09 12:59:15 · 930 阅读 · 0 评论 -
回忆智能指针
今天去回想了一下智能指针,发现长时间不用,好多知识点都忘记了,所以在这里写一篇博客记录一下。C++当中没有自动内存回收机制,这样每次new出来的内存都需要我们手动的去delete,这样就会存在忘记的可能性,最终造成内存的泄漏。,所以为了解决这个问题,C++引入了智能指针。std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_a原创 2016-12-05 11:13:57 · 448 阅读 · 0 评论 -
面试题——快排挖坑法的应用
对一个数组按照给定的下标进行排序,仅仅使用两两交换的方式,要求不能对数组进行扩容,尽可能少的额外空间。 如:原数组为A,B,C,D,E,现在给定的新位置为3,0,1,4,2,那么排序后为D,A,B,E,C, void SwapSort(int *pArr,int *pPos,int n)1.解决问题这是最近看到的一道面试题,感觉突然一下不容易想到,所以特此来写一下:实现代码:原创 2016-12-17 19:13:25 · 2164 阅读 · 1 评论 -
C++知识点部分总结
把最近C++的知识点做了一下总结,有需要的,有问题的,可以发邮件到953659912@qq.com。本人水平有限,难免会出现一些错误,希望大家如有发现,能够及时指出纠正原创 2016-09-05 14:38:10 · 648 阅读 · 0 评论 -
C语言实现封装,继承
1.C语言实现封装在C语言当中,是不存在封装这一个特性的,我们要实现它,我们可以借助两个方法:1.利用C语言中的头文件,在头文件中进行声明,在C文件中对它进行定义,这样就可以隐藏内部信息,用户只能看到接口和公开的信息,无法知道对象所占内存等。 示例代码:头文件:#define _CRT_SECURE_NO_WARNINGS 1//在这里,头文件中给出了声明,用户只能看到公有部分和函数接口。#i原创 2016-09-17 14:34:50 · 12571 阅读 · 0 评论 -
浅析C++当中的对象模型
我们来分析一下C++当中的对象模型。什么是虚函数表?C++的对象模型,我们首先需要分析的是虚函数表。 虚函数,这里我们就要牵扯到多态。简单的说就是父类指针或者引用调用重写的虚函数,当指向父类的时候,调用父类的虚函数,当指向子类的时候,这时候会调用子类的虚函数。首先,我们在这里需要了解一个概念,虚函数表。虚函数呢,就是通过虚函数表来实现的,在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、原创 2016-08-25 14:59:28 · 983 阅读 · 0 评论 -
函数重载和缺省参数
函数重载C++允许在同一作用域类声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能函数重载必须是参数的个数或者类型不同,与返回值无关。在C语言当中是不支持函数重载的,在c语言编译的时候是完全根据函数名进行编译的,而c++当中,函数进行重命名的时候,会给与C的重命名不一样,会加上参数的内容。 也就是调用的时候,会根据原创 2016-07-20 08:31:25 · 1885 阅读 · 0 评论 -
C++引用
引用是C++当中的一个概念。 引用,引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名;左值引用首先说下左值和右值的概念。 右值是放在寄存器,cpu当中的 。 左值必须在内存当中存在实体。左值引用,需要一个取&。示例:int main(){ int a (5); int &ra(a); ra原创 2016-07-20 09:53:34 · 1336 阅读 · 0 评论 -
C++模板实现链表,顺序表
Seqlist.h#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<string>#include<cassert>using namespace std;template<typename T>class SeqList{public: SeqList(); ~SeqList(); SeqLis原创 2016-08-29 14:26:30 · 1119 阅读 · 1 评论 -
C++string类的实现
面试的时候我们可能会经常碰到这个问题,所以我们需要复习一下这个问题。由于时间要求,我们不可能写出std::string那样的功能,我们需要能够大体实现相关功能.#include<iostream>#include<cstdlib>using namespace std;class String{ friend ostream& operator<<(ostream& os,String原创 2016-08-20 14:15:45 · 1761 阅读 · 0 评论 -
C++当中的几种强制类型转换
在C++当中,我们不推荐继续使用C类型的强制转化,而是使用标准C++的类型转换符,标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。static_cast只要是不包含底层的const,我们都可以使用static_cast,当需要一个较大的算数类型赋值给较小的类型的时候,这个时候static原创 2016-08-31 14:50:32 · 713 阅读 · 0 评论 -
模拟string的Copy-On-Write
Copy-On-Write的原理:Copy-On-Write一定使用了“引用计数”,是的,必然有一个变量类似于RefCnt。当第一个类构造时,string的构造函数会根据传入的参数从堆上分配内存,当有其它类需要这块内存时,这个计数为自动累加,当有类析构时,这个计数会减一,直到最后一个类析构时,此时的RefCnt为1或是0,此时,程序才会真正的Free这块从堆上分配的内存。这个RefCnt该存在在哪里原创 2016-08-22 10:16:30 · 714 阅读 · 0 评论 -
shared_ptr循环引用问题
我们大家都知道shared_ptr是采用引用计数的方式进行。但是它存在一个问题:#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<cstdlib>#include<boost/shared_ptr.hpp>using namespace std;struct Node{ ~Node() { co原创 2016-09-04 08:58:11 · 4242 阅读 · 0 评论 -
利用仿函数实现定制删除器
1.仿函数首先我们需要知道什么是仿函数。 仿函数:仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。 示例:#include<iostream>#include<cstdlib>using namespace std;class Print{public: void opera原创 2016-09-04 11:21:20 · 578 阅读 · 0 评论 -
C++11右值引用和move语义
最近面试被问到这个没答上来,在此整理一下右值引用在C++11当中又一个概念叫做右值引用,这个概念我们首先要能够进行区分左值和右值的概念,左值就是一个具体的内存对象,可以修改的,右值就是一个值,这个值可以赋值给其他的。右值引用的作用是让我们能够得到临时对象的所有权,这样我们就可以去修改临时对象了。int i = 50;int &a = i; //左值引用int &&ra = 42; /原创 2017-05-29 13:51:21 · 1081 阅读 · 0 评论