- 博客(38)
- 资源 (25)
- 收藏
- 关注
转载 windows网络编程
Winsock是windows系统下利用Socket套接字进行网络编程的相关函数,是Windows下的网络编程接口。 Winsock在常见的Windows平台上有两个主要的版本,即Winsock1和Winsock2。编写与Winsock1兼容的程序你需要引用头文件WINSOCK.H,如果编写使用Winsock2的程序,则需要引用WINSOCK2.H。此外还有一个MSWSOCK.H头文...
2018-05-31 22:04:10 6920 2
转载 c++泛型
什么是泛型编程?简单来说,泛型编程,意思就是针对广泛类型的编程方式。具体类型可以有不同的实现方式,但是针对广泛类型编程,就能在需要调用时才指定参数类型或者调用类型。泛型编程是一种基于发现高效算法的最抽象表示的编程方法。也就是说,以算法为起点并寻找能使其工作并且有效率的工作的最一般的必要条件集。可以想象的是,很多算法都需要相同的必要条件集,并且这些必要条件集有不同的实现方式。STL标准模版库就是泛型...
2018-05-30 16:05:43 2741
转载 C++中关于set的自定义排序函数的书写
如果说我想在set里面添加一个自定义的类型,比如说下面的结构体:struct Symbol{ char name[10];};1234我们如果要用set来盛放Symbol,我们应该怎么办么?set<Symbol> gSym;1如果像上面这么来写的话,或许你的编译能够通过,但是应该插入两个元素之后就会报错:Symbol s1 = {"hi"};Symbol s2 = {"g...
2018-05-30 16:04:46 909 1
转载 C++98与c++11的新特性
一、新语法1.自动类型推导autoauto的自动推导,用于从初始化表达式中推断出变量的数据类型。//C++98int a = 10;string s = "abc";float b = 10.0;vector<int> c;vector<vector<int> > d;map<int, string> m;m[1] = "aaa";...
2018-05-30 08:48:02 381
转载 vector中resize(),reserve()区别
1、resize(n) 调整容器的长度大小,使其能容纳n个元素。如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的元素。2、 resize(n,t)多一个参数t,将所有新添加的元素初始化为t。而reserver()的用法只有一种reserve(n)预分配n个元素的存储空间。了解这两个函数的区别,首先要搞清楚容器的capacity(容量)与size(长度)的区别。size指...
2018-05-29 11:54:13 168
原创 仿函数优点
1.仿函数可有拥有自己的数据成员和成员变量,这意味着这意味着仿函数拥有状态。这在一般函数中是不可能的。2.每个仿函数有自己的型别。3.仿函数通常比一般函数有更好的速度。...
2018-05-29 09:07:20 2403 1
转载 class与namespace的区别
class也是一个名字空间,不过他是封闭的,也就是说你只能在一个文件里面定义class包含什么(通俗点讲,就是一个class只能有一个头文件); namespace是开放的,和class不同的是你可以在多个文件里面象同一个namespace里面添加东西。比如stl里面的东西都是在名字空间std里面,但是却定义在了多个文件里面。class做名字空间时,与namespace形式上类似 但namespa...
2018-05-27 10:36:52 6155 1
转载 c++ 名称空间
1.定义namespace 名称空间名{ 变量类型 变量; 函数返回值类型 函数原型;} 在名称空间作用域内变量、函数原型被称为实体。实体在名称空间外不可见。2.使用1. using申明机制using namespace 名称空间名2. 名称空间名 :: 函数名namespace 是C++中的一个新的特性,它的出现只要是为了避免出现名字污染。JAVA语言中的packing包和C++的name...
2018-05-27 10:36:07 2536
转载 C++非类型模板参数
非类型模板参看,顾名思义,模板参数不限定于类型,普通值也可作为模板参数。在基于类型的模板中,模板实例化时所依赖的是某一类型的模板参数,你定义了一些模板参数(template<typename T>)未加确定的代码,直到模板被实例化这些参数细节才真正被确定。而非类型模板参数,面对的未加确定的参数细节是指(value),而非类型。当要使用基于值的模板时,你必须显式地指定这些值,模板方可被实...
2018-05-27 09:35:49 716 1
转载 C++面试题
什么是线程安全?线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。问1:请用简单的语言告诉我C++ 是什么?答:C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多...
2018-05-22 09:41:08 93
原创 正则表达式的匹配
class Solution {public: bool isMatch(const char *s, const char *p) { int l1 = strlen(s); int l2 = strlen(p); bool dp[l1+1][l2+1]; memset(dp,false,sizeof(dp)); ...
2018-05-21 17:11:49 73
原创 c++面试题
堆和栈的区别 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。 注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局...
2018-05-21 10:29:03 235
原创 z字型打印序列
class Solution {public: string convert(string s, int nRows) { vector<string> v; if(s.size()<=0||nRows<=1) { return s; } for(int i=0;i<nRows;i++) { string S; v.push_bac...
2018-05-19 16:49:45 291
转载 C++面试题
1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动...
2018-05-19 11:41:22 257
转载 分布式负载均衡
1.随机采用随机算法进行负载均衡,通常在对等集群组网中,随机路由算法消息分发还是比较均匀的,但是存在两个主要缺点:在一个截面上碰撞的概率较高非对等集群组网,或者硬件配置差异较大,会导致各节点负载不均匀2.轮询轮询,按公约后的权重设置轮询比率,到达边界之后,继续绕接。他的主要缺点是存在慢的提供者累积请求问题。比如第二台机器很慢,但是没挂,当请求调到第二台时就卡在那,久而久之,所以请求都卡在调到第二台...
2018-05-19 09:55:19 377
转载 集群负载均衡
12.2 HTTP重定向Web服务器可通过Http响应头信息中的Location标记来返回一个新的URL,浏览器自动去访问这个新的URL。实现:可以通过Web应用程序代码实现你想到的调度策略,如可根据请求的URL的不同来进行合理的过滤和转移。12.3 DNS负载均衡DNS负责将用户请求的域名映射为实际的IP地址,这种映射可以是一对多的( DNS的A记录,用来指定域名对应的IP地址),这样DNS服务...
2018-05-19 09:42:04 166
转载 分布式系统数据分片
正文 在前文中,提出了分布式系统(尤其是分布式存储系统)需要解决的两个最主要的问题,即数据分片和数据冗余,下面这个图片(来源)形象生动的解释了其概念和区别: 其中数据即A、B属于数据分片,原始数据被拆分成两个正交子集分布在两个节点上。而数据集C属于数据冗余,同一份完整的数据在两个节点都有存储。当然,在实际的分布式系统中,数据分片和数据冗余一般都是共存的。 本文主要讨论数据分片的三个问题:...
2018-05-19 09:27:18 11801 1
转载 C语言中static用法
(1)第一条也是最重要的一条:隐藏当我们同事编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,举例来说:同时编译2个源文件:a.c和main.c下面是a.c的内容char a = 'A'; // global variableint msg() { printf("Hello\n"); return 0;} 下面是main.c的内容int main(void)...
2018-05-19 09:23:52 2494
转载 模糊窗口效应 和延迟确认
第一部分:SWSSWS:Silly Window Syndrome 糊涂窗口综合症何谓糊涂窗口综合症 当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小。极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象就叫糊涂窗口综合症。发送端引起的SWS 如果发...
2018-05-19 08:54:22 426
转载 最长不重复字符串
给定字符串,查找最长子串的长度而不重复字符。例如,对于“ABCABCBB”,没有重复字母的最长子串是“ABC”,长度为3。对于“BBBB”,最长的子串是“B”,长度为1。/* "滑动窗口" 比方说 abcabccc 当你右边扫描到abca的时候你得把第一个a删掉得到bca, 然后"窗口"继续向右滑动,每当加到一个新char的时候,左边检查有无重复的char, 然后...
2018-05-18 16:49:08 1743
转载 string find()函数
先看一种很多人日常使用错误方式string str("hello world");int pos=str.find_first_of("h");if(pos!=string::npos) // 或者 if(pos!=-1) {......// 查找到了} //不存在是find返回-1这样的使用,结果是正常的,但并没有很好的理解string find函数的返回类型和string::npos真正的值...
2018-05-18 16:41:03 1989
转载 两个有序数组中位数
大小m和n分别有两个排序数组A和B。找到两个排序数组的中值。总的运行时间复杂度应该是O(log(m+n))。class Solution { public: /** * @param A: An integer array. * @param B: An integer array. * @return: a double whose format is ...
2018-05-18 16:09:25 578
转载 虚函数 纯虚函数 虚基类
虚函数 ,纯虚函数, 虚基类,它们都和virtual有关,这三个带有虚字的定义容易使人混淆,下面先从作用上来解释这三个定义的区别:1.虚函数是用于多态中virtual修饰父类函数,确保父类指针调用子类对象时,运行子类函数的。2.纯虚函数是用来定义接口的,也就是基类中定义一个纯虚函数,基类不用实现,让子类来实现。3.虚基类是用来在多继承中,如果父类继承自同一个父类,就只实例化一个父类(说的有点绕,就...
2018-05-18 11:42:46 217
转载 编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数
char *strcpy(char *strDest, const char *strSrc){ if ( strDest == NULL || strSrc == NULL) return NULL ; if ( strDest == strSrc) returnstrDest ; char *tempptr = strDest ; while...
2018-05-17 11:45:55 2449
转载 内联函数与宏
内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。 宏定义不检查函数参数,返回值什么的,只是展开,相对来说,内联函数会检查参数类型,所以更安全。 内联函数和宏很类似,而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的...
2018-05-17 11:44:44 97
转载 C++继承中重载、重写、重定义
一.重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。二.重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中出现的 。重写需要注意:1 被重写的函数不能是static的。必须是virtual的2 重写函数必须有相同的类型,名称和参数列表3 重写函...
2018-05-17 11:01:35 719
原创 动态特性
在绝大多数情况下,程序的功能是在编译的时候就确定下来的,我们称为静态特性。反之,如果程序的功能是在运行时刻才确定下来的,则称为动态特性。 动态特性是面向对象语言最强大的功能之一,因为它在语言层面上支持程序的可扩展性,而可扩展性是软件设计追求的重要目标之一。 c++虚函数、抽象基类、动态绑定、多态构成了出色的动态特性。1.虚函数,动态绑定: ...
2018-05-17 10:59:34 4741
转载 B-树,B+树,B*树
B-树B-树是一种多路搜索树(并不一定是二叉的)1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:1、根结点至少有两个子女;2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 &l...
2018-05-17 10:29:00 165
转载 迪杰斯特拉算法
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止基本思想通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。此外,引进两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到...
2018-05-17 10:00:48 454
转载 广度优先搜索 深度优先搜索
前言这几天复习图论算法,觉得BFS和DFS挺重要的,而且应用比较多,故记录一下。广度优先搜索有一个有向图如图a 图a 广度优先搜索的策略是:从起始点开始遍历其邻接的节点,由此向外不断扩散。1.假设我们以顶点0为原点进行搜索,首先确定邻接0的顶点集合S0 = {1,2}。2.然后确定顶点1的集合S...
2018-05-17 09:10:36 277
转载 树、森林与二叉树相互转化
1、树转换为二叉树由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。将树转换成二叉树的步骤是:(1)加线。就是在所有兄弟结点之间加一条连线;(2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线;(3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。树转换为二叉树的过程示...
2018-05-17 08:53:00 14267 3
转载 哈夫曼树
1、基本概念a、路径和路径长度若在一棵树中存在着一个结点序列 k1,k2,……,kj, 使得 ki是ki+1 的双亲(1<=i<j),则称此结点序列是从 k1 到 kj 的路径。从 k1 到 kj 所经过的分支数称为这两点之间的路径长度,它等于路径上的结点数减1.b、结点的权和带权路径长度在许多应用中,常常将树中的结点赋予一个有着某种意义的实数,我们称此实数为该结点的权,(如下面一个树...
2018-05-17 08:45:06 589
转载 死锁产生的原因及四个必要条件
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的...
2018-05-17 08:41:14 155
转载 红黑树
红黑树首先是一棵二叉查找树,它每个结点都被标上了颜色(红色或黑色),红黑树满足以下5个性质:1、 每个结点的颜色只能是红色或黑色。2、 根结点是黑色的。3、 每个叶子结点都带有两个空的黑色结点(被称为黑哨兵),如果一个结点n的只有一个左孩子,那么n的右孩子是一个黑哨兵;如果结点n只有一个右孩子,那么n的左孩子是一个黑哨兵。4、 如果一个结点是红的,则它的两个儿子都是黑的。也就是说在一条路径上不能出...
2018-05-16 14:36:16 65
转载 平衡二叉树
AVL树简介AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。一棵AVL树有如下必要条件:条件一:它必须是二叉查找树。条件二:每个节点的左子树和右子树的高度差至多为1。图一中左边二叉树的节点45的左孩子46比45大,不满足二叉...
2018-05-16 09:48:41 335
转载 c++中static的用法详解
C 语言的 static 关键字有三种(具体来说是两种)用途:1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。[cpp] view plain copyint foo(){ static int i = 1; // note:1 //int i = 1; // note:2 i += 1; return i; } 要明白这个用法...
2018-05-16 09:34:27 103
转载 C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为:(type-id)expression//转换格式1type-id(expression)//转换格式2c++除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast,主要运用于继承关系类间的强制...
2018-05-16 09:24:49 69
转载 C中volatile关键字
C中volatile关键字 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:...
2018-05-16 08:59:42 239
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人