- 博客(37)
- 收藏
- 关注
原创 虚函数的构造析构顺序
#include <iostream>using namespace std;class A { public: A() { cout << "A()" << endl; } virtual void vt() { cout << "vt A" << endl; }
2017-03-30 01:01:34 499
原创 C++11-initializer_list
模板initializer_list是C++11新增的,可以使用初始化列表语法将STL容器初始化为一系列值。 vector v {1, 2, 3}; 等价于 vector v({1, 2, 3});这是因为容器类现在包含将initializer_list作为参数的构造函数vector v(10);声明一个10个元素的vector,未初始化。 vector v({10});声明一个元素,初始化
2017-03-29 22:17:42 693
原创 C++11-基于范围的for循环
基于范围的for循环是为用于STL而设计的。 double prices[5] = {1.1, 2.2, 3.3, 4.4, 5.5}; for (double x : prices) cout << x << endl; 使用引用就可修改 for (double &x : prices) x = 2 * x;另外,vector books; for (auto x :
2017-03-29 21:56:12 507
原创 C++11-智能指针和空指针
智能指针如果指针ps有一个析构函数,该析构函数将在ps过期时释放它指向的内存。因此,问题在于它只是一个常规指针,不是有析构函数的类对象。如果它是对象,则可以在对象过期时,让它的析构函数删除指向的内存。 头文件memorystd::shared_ptr ps(newstring);std::shared_ptr ps(newstring("a"));所有的智能指针类都有一个e
2017-03-29 21:36:16 7075
原创 树的遍历
#include <iostream>#include <stack>#include <queue>using namespace std;typedef struct node { int data; node *left; node *right; node() { data = 0; left = NULL;
2017-03-24 22:52:25 256
原创 排序算法总结
#include <iostream>#include <cstring>using namespace std;void bubble(int *a, int length) { for (int i = 0; i < length; i ++) { for (int j = 0; j < length - i - 1; j ++) { if (a
2017-03-24 22:51:50 396
原创 STL中set的insert操作的返回值
#include <iostream>#include <set>using namespace std;int main() { set<int> s; s.insert(1); //返回值为pair<set<int>::iterator, bool> //迭代器表示该元素的位置 cout << *s.insert(1).first << endl;
2017-03-21 19:44:49 13406
转载 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
最近参加KDD Cup 2012比赛,选了track1,做微博推荐的,找了推荐相关的论文学习。“Item-Based Collaborative Filtering Recommendation Algorithms”这篇是推荐领域比较经典的论文,现在很多流行的推荐算法都是在这篇论文提出的算法的基础上进行改进的。 一、协同过滤算法描述 推荐系统应用数据分析技术,找出用
2017-03-21 00:54:11 1591
原创 计算机网络面试考点
1、OSI,TCP/IP,五层协议的体系结构,以及各层协议答:OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。 五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。 每一层的协议如下: 物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器) 数据链路:PPP、F
2017-03-19 23:21:54 327
转载 海量数据处理之Tire树(字典树)
参考博文:http://blog.csdn.net/v_july_v/article/details/6897097第一部分、Trie树1.1、什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效
2017-03-19 22:44:44 717
转载 C++ 智能指针详解
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、bo
2017-03-18 21:58:51 451
转载 关于typedef的用法总结
在C还是C++代码中,typedef都使用的很多,在C代码中尤其是多。typedef与#define有些相似,其实是不同的,特别是在一些复杂的用法上,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,加上自己的一个分析。基本定义:typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数
2017-03-18 11:44:03 276
转载 动态规划算法
什么是动态规划? 动态规划(Dynamic Programming,所以我们简称动态规划为DP)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of opti
2017-03-17 16:49:11 609
转载 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: BST树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小
2017-03-17 16:27:29 260
转载 STL sort函数--对map按值排序
问题:要对以map中的数据进行按value排序难点:map中的数据是按照key排序的,用for循环进行迭代器输出的顺序,就是按照key排序的顺序。但是按value排序就不可能了。方案:STL中的sort函数原型:#include <algorithm>using namespace std;template <class RandomAccessIterator> void sort
2017-03-17 00:23:02 1081
转载 C++学习之Pair
Pair类型概述pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: pair<int, string> a;表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。 pair<string, string> a(“James”, “Joy”);也可以像上面一样在
2017-03-17 00:22:04 246
转载 野指针
讨论一什么是野指针? 一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业。但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来。而在卧室的没有吃到蛋糕,所以不肯完成他的作业。结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了。结果第二天她就被
2017-03-14 21:06:27 260
转载 MySQL中针对大数据量常用技术:查询优化,数据转移
如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoS
2017-03-14 20:30:45 651
转载 数据库索引的作用和优点缺点
数据库索引及基本优化入门2013-7-26 一 前言 经常在面试中发现很多人工作了好多年了,项目经验也不少,用过各种数据库,但大都不知道这些SQL语句背后的基本原理,更别说数据库优化了。平时做项目只知道实现功能,懒得学习,懒得思考,懒得看书(其实本人也是,不要找借口说这是China国情,项目是给boss做的,但技术和成长是你自己的)。 本篇文章主要讲述数据库索引的基
2017-03-14 00:33:26 1934
转载 android 线程与进程 区别 联系
进程与线程的区别大三很重要的一个知识点,也是面试中经常问到的。网上转载博客痕迹明显,且千篇一律。我简单提取下,记录下来,希望能帮到你。引入进程之前–多道程序设计概述多道程序设计技术是操作系统最早引入的技术,它的设计思想是允多个程序同时进入内存并运行,其目的是为了CPU的利用率,进而提高系统效率。特点多道程序设计技术引入之前,多个程序串行执行。只存在一个程序计数器(PC, program count
2017-03-12 23:55:04 522
转载 进程和线程关系及区别
1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.2.关系一个线程可以创建和撤销另一个线
2017-03-12 23:53:05 207
转载 栈,堆,全局,文字常量,代码区总结
一. 区域划分堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。每个C ++
2017-03-12 21:21:07 517
转载 使用数组作为参数传递
如果一个函数以一维数组为参数,我们可以这样声明这个函数void func(int* a) ;void func(int a[]) ;void func(int a[3]) ;实际上,这三种形式是等价的,在使用数组做参数时,编译器会自动将数组名转换为指向数组第一个元素的指针,为什么呢?这要从参数的传递方式说起,参数有三种传递方式,按值传递,按指针传递,按引用传递,分别如下void T
2017-03-11 23:17:28 1064
转载 图的邻接表和邻接矩阵
图的存储结构主要分两种,一种是邻接矩阵,一种是邻接表。 1.邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图。 从上面可以看出,无向图的边数组是一个对称矩阵。所谓对称矩阵
2017-03-10 13:47:37 7665
转载 最短路径—Dijkstra算法和Floyd算法
Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图 G=(V,E) 中,假
2017-03-10 12:25:20 386
转载 最小生成树Kruskal算法
克鲁斯卡尔(Kruskal)算法(只与边相关)算法描述:克鲁斯卡尔算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边又关系,可以证明其时间复杂度为O(eloge)。算法过程:1.将图各边按照权值进行排序2.将图遍历一次,找出权值最小的边,(条件:此次找出的边不能和已加入最小生成树集合的边构成环),若符合条件,则加入最小生成树的集合中。不符合条件则继续遍历图,寻找下一个最小权值的边。3.
2017-03-10 12:20:06 310
转载 最小生成树Prim算法理解
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意
2017-03-10 11:41:48 378
转载 类中const函数及非const函数的调用规则
类中const函数及非const函数的调用规则class Student { public: int getAge() { return m_age; }int getAge() const{ return m_age;}void setAge(int age){ m_age = age;}void setAge(int a
2017-03-09 19:40:11 723 1
转载 前序中序后序遍历——递归与非递归实现
二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说
2017-03-09 16:18:26 345
转载 KMP-字符串匹配算法
kmp算法又称“看毛片”算法,是一个效率非常高的字符串匹配算法。不过由于其难以理解,所以在很长的一段时间内一直没有搞懂。虽然网上有很多资料,但是鲜见好的博客能简单明了地将其讲清楚。在此,综合网上比较好的几个博客(参见最后),尽自己的努力争取将kmp算法思想和实现讲清楚。kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置。常规方法是遍历a的
2017-03-09 00:08:50 262
转载 编辑距离
1. 编辑距离定义 今天我们来研究一个有趣的算法题,叫做字符串编辑距离。编辑距离研究的问题和最长公共子序列有相似之处,都是比较两个字符串之间的相似性,只是采用的标准不太相同。 先给出编辑距离的定义:设A和B是2个字符串,要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括: (1)删除一个字符(delete); (2)插入一个字符
2017-03-08 23:56:47 293
转载 C++中的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:#include<iostream>using names
2017-03-06 15:02:06 338
转载 atoi函数源代码
atoi函数源代码isspace(int x){ if(x==' '||x=='\t'||x=='\n'||x=='\f'||x=='\b'||x=='\r') return 1; else return 0;}isdigit(int x){ if(x<='9'&&x>='0') return 1; else return 0;}int
2017-03-06 00:36:38 956
转载 malloc()函数和free()函数源代码
虽然malloc()函数和free()函数是C语言中最常用的函数之一,但是可能大多数人只是用它,却没有去查看它的原型。记得有一次听一个学长说他去面试,面试官让他写出malloc()函数的原型,他当时不知所措就悲剧了。今天看了一篇文章,给出了malloc()函数的源代码,特转载于此与大家共享。原文地址:http://blog.sina.com.cn/s/blog_642bb6110100k144.h
2017-03-05 23:56:50 1405
转载 数据挖掘-谱聚类
1. 谱聚类 给你博客园上若干个博客,让你将它们分成K类,你会怎样做?想必有很多方法,本文要介绍的是其中的一种——谱聚类。 聚类的直观解释是根据样本间相似度,将它们分成不同组。谱聚类的思想是将样本看作顶点,样本间的相似度看作带权的边,从而将聚类问题转为图分割问题:找到一种图分割的方法使得连接不同组的边的权重尽可能低(这意味着组间相似度要尽可能低),组内的边的权重尽可能高
2017-03-03 11:07:56 592
原创 栈与队列
1、栈的定义栈是限定仅在表尾进行插入和删除操作的线性表,Last In First Out。 注意: 线性表,栈元素具有线性关系,即前驱后继关系。2、两栈共享空间typedef struct { int data[MAXSIZE]; int top1; //stack1 栈顶指针 int top2; }SqDoubleStack; 两个栈的栈顶相对,top1
2017-03-02 21:10:19 204
转载 百度笔试题:malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执
2017-03-01 21:12:29 233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人