自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 delete delete[]

C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。 http://www.cnblogs.com/charley_yang/archive/2010/12/0

2017-09-07 22:26:32 329

原创 new和malloc的区别

http://blog.csdn.net/hackbuteer1/article/details/6789164 1.malloc函数 malloc(memory allocation),中文名字是动态内存分配 原型:extern void *malloc(unsigned int num_bytes) 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,

2017-09-07 15:26:49 239

原创 仿函数

#include<iostream>#include<functional>using namespace std;int main(){ //一下产生一些仿函数实体(对象) plus<int> plusobj; minus<int> minusobj; multiplies<int> multipliesobj; divides<int> divides

2017-09-04 20:53:11 246

原创 multiset

multiset的特性及用法与set一致,唯一的区别在于它允许键值重复#include <set>#include <iostream>using namespace std;int main(){ multiset<int> ms; ms.insert(10); ms.insert(13); ms.insert(11); ms.insert(19);

2017-09-04 16:47:15 292

原创 STL源码分析

map的特性是: 所有元素都会根据元素的键值自动被排序,map的所有元素都是pair,同时拥有实值和键值。pair的第一元素被视为键值,第二元素被视为实值。map不允许两个元素拥有相同的键值。template<class T1,class T2>struct pair{ typedef T1 first_type; typedef T2 scond_type; T1 f

2017-09-04 16:43:35 237

原创 STL源码分析set

#include<set>#include<iostream>using namespace std;int main(){ int i; int ia[5] = { 0, 1, 2, 3, 4 }; set<int> iset(ia, ia + 5); cout << "size=" << iset.size() << endl; cout << "3 c

2017-09-04 15:44:35 315

原创 动态运行时类型识别与显式转换

1、typeid 通过运行时类型识别(RTTI),程序能够使用基类的指针或引用来检索这些指针或引用所指对象的实际类型。c++可以通过下面两个操作提供RTTI 1、typeid操作符,返回指针或引用所指对象的实际类型。 2、dynamic_cast操作符,将基类类型的指针或引用安全的转换为派生类型的指针或引用。用法:Base *bp;Derived *dp;if(typeid(*bp)==t

2017-08-27 21:31:06 276

原创 数据库

数据可索引的作用:(什么情况适合建立索引以及什么情况下不适合建立索引)作用:创建索引可以大大提高系统的性能。第一:通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二:可以大大加快数据的检索速度,这也是创建索引的最主要原因。 第三:可以加速表与表之间的连接,特别是在实现数据的参照完整方面有特别的意义第四:在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

2017-08-27 20:29:51 177

原创 树的公共祖先问题

#include<iostream>#include<vector>#include<list>using namespace std;struct TNode{ int key; vector<TNode *> m_vchildren;};int GetNodePath(TNode *pRoot, TNode *pNode, list<TNode *>&path){

2017-08-27 17:08:14 269

原创 关于输入的几种总结

istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C风格的串流的输出操作。 strstream类同时可以支持C风格的串流的输入输出操作。 第一种:输入带有空格的或者其他字符串 可以用stringstream分离vector<string> split(string str,char sep){stringstream ss(str);

2017-08-26 17:22:31 292

原创 指针与引用

1、指针和引用的差别? (1)非空区别。任何时候都不能使用指向空值的引用。一个引用总是指向某些对象。 (2)合法性区别:在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空 (3)可修改区别:指针与引用的另一个重要的区别是指针可以被重新赋值以指向两一个不同的对象。 引用则总是指向在初始化时被指向的对象,以后不能

2017-08-26 17:02:33 201

原创 内联函数与宏定义

内联函数与宏的差别是什么? 内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。 内联函数: 在c++中我们通常定义一下函数来求两个整数的最大值int max(int a,int b){return a>b?a:b;}为什么一个小小的操作定义一个函数的好处 1、阅读和理解函数max的调用,要比度一条等

2017-08-23 20:53:29 288

原创 结构体、共用体与枚举

结构体 1、结构体类型定义中不允许对结构体本身的递归定义struct person{类型名 成员名struct person *per;}2、结构体定义中可以包含另外的结构体,即结构体是可以嵌套的 3、结构体变量可以在定义的时候进行初始化struct person{char name[20];char sex;}boy1={"zhangbing",'M'};共用体(union)u

2017-08-23 11:22:48 211

原创 虚函数表的实现

#include<iostream>#include<string>using namespace std;class Base{public: virtual void f(){ cout << "Base::f" << endl; } virtual void g(){ cout << "Base::g" << endl; } virtual void h(){ c

2017-08-22 16:52:24 331

原创 缓存算法(页面置换算法)-FIFO、LFU、LRU

1、FIFO算法 FIIO,先进先出。在FIFO Cache设计中,核心原则就是:如果一个数据最先进入缓存中,则应该最早淘汰。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。 在FIFO Cache中应当支持以下操作 get(key):如果Cache中存在key,则返回对应的value;否则返回-1; set(key,value):如果cache中存在该key,则重置value值

2017-08-21 22:00:47 1189

原创 网络编程~epoll

select的缺点: 1、调用select函数后常见的针对所有文件描述符的循环语句。 2、每次调用select函数时都需要向该函数传递监视对象信息。 缺点: { 1、每次调用select函数时向操作系统传递监视对象的信息。 2、应用系统向操作系统传递数据对程序造成很大的负担。 }弥补方案: 仅仅向操作系统传递1次监视对象,监视范围或内容发生变化时只通知发生变化的事项。select的优

2017-08-21 20:15:50 207

转载 虚函数测试1

//多态测试 #include<iostream> #include<vector> #include<string> using namespace std; //基类A class A { public: A() { printf("A constructed.\n"); } virtual ~A()

2017-08-21 10:17:52 168

原创 运输层相关信息(可靠传输的原理、运输连接管理)

注意1、IP层只能提供尽最大能力努力服务,TCP下面的网络所提供的是不可靠的传输 解决方法我们用可靠传输协议,出现差错的时候让发送方重传出现错误的数据, 在接收方来不及接收数据时,降低发送方发送数据的速度。 两个相关协议及可靠的TCP的运输连接 1、停止等待协议(通过用超时重传来实现可靠传输) 2、连续ARQ协议(滑动窗口) TCP可靠的传输

2017-08-21 09:52:10 560

转载 虚函数(二)

#include<iostream> #include<vector> #include<string> using namespace std; //基类A class A { public: A() { printf("A constructed.\n"); } virtual ~A() {

2017-08-18 17:34:39 276

原创 互斥对象的使用方法

#include<iostream>#include<string>#include<thread>#include<mutex>using namespace std;mutex mu;void shared_print(string msg, int id){ mu.lock(); cout <<msg << id << endl; mu.unlock();}

2017-06-08 16:57:03 362

原创 虚函数专题

结合笔记本 程序:#include <iostream> using namespace std;class Base1 {public: virtual void display() const; //虚函数 };void Base1::display() const { cout << "Base1::display()" << endl;}class Base

2017-06-04 11:51:04 166

原创 成员函数的重载、覆盖和隐藏的区别与联系

1.重载:说的是在同一个类中,有两个成员函数同名,他们的形参列表必须不同,也就是说他们的形参个数和形参类型至少有一着是不相同的。但不能出现函数的形参个数与类型均相同,仅仅依靠函数返回值类型的不同来区分,这和普通函数的重载概念是完全一致的。 重载是指通一个类中不同方法之间的关系,是水平关系。 2、覆盖,说的是基类和派生类之间的虚函数的关系。假设基类中由虚函数func(),派生类中也由虚函数func

2017-05-10 21:57:42 466

转载 c++多态的含义

1.什么是多态? (1)通过继承同一个基类,产生相关的不同派生类,与基类中同名的成员函数在不同的派生类中会与不同的实现,也就是说:一个接口、多种方法。 (2)多态是面向对象的重要技术之一,它是一种行为的封装,是同一个事物所表现出来的多种形态,简单地说就是:一个接口、多种形态。 (3)现在,运行时使用同一个成员名调用类对象的成员函数,会调用哪个对象的成员函数呢?这就是多态解决的问题。 2.多态

2017-05-10 21:40:12 626

转载 经典线程同步总结 关键段 事件 互斥量 信号量

1、线程(进程)同步的主要任务 答:在引入多线程后,由于线程执行的异步性,会给系统造成混乱,特别是急用临界资源时,如多个线程急用同一台打印机,会使打印结果交织在一起,难于区分。当多个线程急用共享变量,表格,链表时,可能会导致数据处理出错,因此线程同步的主要任务是使并发执行的各个线程之间能够有效的共享资源和相互合作,从而使程序的执行具有可再现性。 2、线程(进程)之间的制约关系(互斥) 当线程并

2017-04-19 11:47:26 286

转载 多线程(六)经典线程同步问题事件Event

Event可以解决线程的同步问题 事件Event实际上是个内核对象,它的使用非常方便。 CreateEvent:创建事件, 函数原型: HANDLE CreateEvent(LPSEURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,LPCTSTR lpName); 1:表示安全控制,一般直接传入N

2017-03-23 10:48:30 298

原创 map 数组结构体计数(二)

结构体计数#include<iostream>#include<string>#include<map>using namespace std;struct Key_Value_Pair{ int index; int value;};int main(){ Key_Value_Pair Part[1000]; int Key_num; cin>>

2017-03-19 14:48:14 291

原创 map技数,数组计数,结构体计数的相关比较与分析(一)

数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。输入描述: 先输入键值对的个数 然后输入成对的index和value值,以空格隔开输出描述: 输出合并后的键值对(多行)输入例子: 4 0 1 0 2 1 2 3 4输出例子: 0 3 1 2 3 4 1.map 注意点 http://blog.csdn

2017-03-19 11:49:53 364

原创 字符串分割与质数问题

•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 连续输入字符串(输入2次,每个字符串长度小于100)输出描述: 输出到长度为8的新字符串数组输入例子: abc 123456789输出例子: abc00000 12345678 90000000 substr#include<iostream>#in

2017-03-18 15:52:37 341

原创 多线程同步问题

程序描述: 主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数-——sleep(50)——全局变量++——sleep(0)——输出参数和全局变量 要求: 1、子线程输出的线程序号不能重复 2、全局变量的输出必须递增。考察点: 1、主线程创建子线程并传入一个指向变量地址的指针作参数,由于线程启动需要花费一定的时间,所以在子线程根据这个指针访问并保存数据前,

2017-03-16 16:08:51 215

转载 多线程、进程(二Interlocked)

了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表示有今天多少个用户登录,如果这个值不等于我们启动的线程个数,那显然说明这个程序是有问题的。整个程序代码如下:#include<stdio.h>#include<process.h>#i

2017-03-16 11:32:56 202

转载 多线程入门(一CreateThread与_beginthreadex)

用CreateThread创建多线程#include<iostream>#include<windows.h>DWORD WINAPI ThreadFun(LPVOID pM){ printf("子线程的线程ID号为:%d\n子线程输出Hello World\n",GetCurrentThreadId()); return 0;}int main(){ printf(

2017-03-16 11:00:08 322

转载 服务器与客户端

// server.cpp #include <iostream> #include <cstdio> //#include <Winsock2.h> #include <winsock.h>using namespace std; int main() { // 加载socket动态链接库(dll) WORD wVersionRequested;

2017-03-15 20:57:40 415

原创 KMP算法

kmp算法 编辑 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。1.部分匹配值

2017-03-15 16:10:16 264

转载 动态规划2

最长递增子序列的问题 给定数组arr,返回arr的最长递增子序列长度。比如arr={2,1,5,3,6,4,8,9,7},最长递增子序列为{1,3,4,8,9},返回arr的最长递增子序列长度。比如arr={2,1,5,3,6,4,8,9,7},最长递增子序列为{1,3,4,8,9}所以返回这个子序列的长度为5。 解决方案: arr:2 1 5 3 6 4 8 9 7 dp:1 1 2 2

2017-03-15 10:49:14 600

原创 动态规划

台阶问题 有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法? f(i)=f(i-1)+f(i-2);矩阵路径最小问题 给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。如果给定的m如大家看到的样子,路径1,3,1,0,6,1,0是所有路径中和最小的,所以返回12. 1 3 5 9 8

2017-03-15 10:14:54 239

原创 找零钱问题

有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。测试样例: [1,2,4],3,3 返回:2class Exchange {public: co

2017-03-15 09:38:17 387

原创 计算字符串中某一个字符的个数

第一种解法: 注意读数据用的是:getline 大写A是65,小写a是97;#include<iostream>#include<string>using namespace std;int main() { string line; getline(cin,line); char a; cin>>a; char a1; if(a>=97

2017-03-10 15:47:40 1128

原创 dynamic_cast<>

用于c++类集成多态间的转换,分为: 1、子类向基类的向上转型, 2,基类向子类的向下转型 向上转型不需要借助任何特殊的方法,只需要将子类的指针或引用即可向下转换:dynamic_cast操作符,将基类类型的指针或引用安全的转换为派生类的指针或引用,dynamic_cast将一个几类对象指针cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类只恨来做相应出力。这也是d

2017-03-07 15:57:53 185

原创 模板类问题

template<class T> class Foo{ T tVar; public: Foo(T t) : tVar(t) { }};template<class T> class FooDerived:public Foo<T>{};int main(){ FooDerived<int> d(5); return 0;}错误,因

2017-03-07 15:34:59 491

原创 函数重载、覆盖、隐藏

1、成员函数被重载的特征: (1)相同的范围(在同一个类中) (2)函数名字相同 (3)参数不同 (4)virtual关键字可有可无 2、覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围 (2)函数名字相同 (3)参数相同 (4)基类函数必须有virtual关键字 3、隐藏是指派生类的函数与基类的函数同名,此时,不论有无virtual关键字,基类的函数被隐藏 如果派生

2017-03-07 15:30:34 188

空空如也

空空如也

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

TA关注的人

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