![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 53
小羊哈利
这个作者很懒,什么都没留下…
展开
-
C/C++之回调函数
本篇文章转自http://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html 今天讨论下C/C++中的回调函数。 在理解“回调函数”之前,首先讨论下函数指针的概念。函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任转载 2016-01-04 22:03:10 · 412 阅读 · 1 评论 -
文件分块器
#include <windows.h>#include <stdio.h>#include <string.h>#include <commdlg.h>今天来酷家乐云核计算公司面试实习生,面试题目是设计一种工具可以完成文件的分割和组合两种功能。代码如下,这个代码是网上找到的,自己修改一下能运行就准备交卷了。mark一下,回去后好好分析代码。int main(int argc, char* a原创 2016-05-18 16:37:20 · 339 阅读 · 0 评论 -
连续子数组的最大和
输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间负责度为O(n)。 基本思想: 令: f(n)f(n)表示以下标n结束的最大子序列和; numnum表示整形数组;f(n)=f(n)= ⎧⎩⎨num[i],f(n−1)+num[i]f(n-1)<0||n==0others\begin{cases}num[i],& \tex原创 2016-05-18 22:19:01 · 319 阅读 · 0 评论 -
Josephus问题
num个小孩围绕坐在一起,分别标记为{1,2,3...,num}\{1,2,3...,num\},从某一个小孩开始计数,每隔interval个孩子便要离开一个,最后剩下的便是获胜者。#include<iostream>using namespace std;int main(){ int num,interval,startNum; cout<<"please input th原创 2016-04-24 13:49:45 · 329 阅读 · 0 评论 -
C++拷贝构造函数
本文主要参考: http://blog.csdn.net/lwbeyond/article/details/6202256拷贝函数的定义拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。 对于一个类X, 如果一个构造函数的第一个参数是下列之一: a) X& b) const X& c) volatile X& d) const vola原创 2016-03-05 11:10:37 · 250 阅读 · 0 评论 -
C++中四种类型转换方式
类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些。原创 2016-04-03 22:01:50 · 251 阅读 · 0 评论 -
剑指offer1:赋值运算符函数
#include<iostream>using namespace std;class CMyString{public: CMyString(char* pData=NULL) { m_pData=pData; } CMyString(const CMyString& str) { m_pData=str.m_pData原创 2016-04-04 11:40:21 · 509 阅读 · 0 评论 -
0-1背包问题(c/c++)
问题介绍:现在有一个可以载重w的背包和n个物品,每个物品的重量和价格分别为wiw_i和viv_i,请选择所装物品,使得在不超过背包载重的前提下,背包里的物品价格最高。求解方案: /#include<iostream> /#include<vector> using namespace std; /* w 背包最大载重 n 物品总数 ws 物品重量 vs 物品价值 res[j]原创 2016-08-28 22:00:59 · 896 阅读 · 0 评论 -
排序算法3之选择排序
选择排序选择排序的原理比较简单,每次遍历待排序数组,找到关键字最小的项目,将其放置在已经排序好的序列最后面,直至所有的项目都排序完全。所以选择排序的时间复杂度主要是来自遍历查询,相比于插入排序,需要不断的交换项目的位置,选择排序每次至多交换一次。其时间复杂度为Ω(n2)\Omega(n^2);空间复杂度,为Ω(n)\Omega(n);由于每次交换位置的时候,将会打乱原来项目的相对位置,因而选择排序是原创 2015-12-21 16:41:33 · 377 阅读 · 0 评论 -
排序算法5之快速排序
快速排序很早就听说了快速排序的大名,然后看算法导论的相关视频也感觉讲的很有意思,现在总结一下。针对待排序数组{a1,a2……an}\{{a_1,a_2……a_n}\}快速排序可以分解为三步:寻找基准数,比较通常就是选择待排序的首项目或者中间项目;将待排序数组分成两个子序列,{b1,b2……bq−1}\{{b_1,b_2……b_{q-1}}\}和{cq+1,……cn}\{{c_{q+1},……c_原创 2015-12-22 20:59:52 · 472 阅读 · 0 评论 -
剑指offer2-重建二叉树
二叉树的遍历: 先序遍历:先访问根节点,再访问左子树,最后访问右子树; 中序遍历:先访问左子树,再访问根节点,最后访问右子树; 后序遍历:先访问左子数,再访问右子树,最后访问根节点; 一般给定一棵二叉树的中序遍历和先序遍历或者给定一个二叉树的中序遍历和后序遍历,这棵二叉树就可以确定下来。仅仅给定先序遍历和后序遍历是无法确定的。 题目: 给定某二叉树的先序和中序遍历结果,请确定该二叉树:#原创 2016-10-04 13:38:58 · 344 阅读 · 0 评论 -
剑指offer3-排列组合
排列:给定一个字符,找出全排列,字符中可能存在重复的字符。#include<iostream>#include<string>#include<set>using namespace std;void arrangement(string& input, int startIndex, set<string>& res){ if (startIndex == input.size()原创 2016-10-05 11:15:35 · 417 阅读 · 0 评论 -
文件存储与B+数据结构
暂且mark一下,过段时间总结。 http://www.360doc.com/content/11/1103/13/6938655_161335261.shtml原创 2016-05-17 12:25:14 · 703 阅读 · 0 评论 -
2015百度机器学习/数据挖掘工程师+自然语言处理工程师笔试题目
1.new 和 malloc 的区别。new 返回指定类型的指针,并且可以自动计算所需要大小。 比如: int *p; p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int); 或: int* parr; parr = new int [100]; //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(in原创 2016-04-20 18:28:16 · 4322 阅读 · 0 评论 -
链表的创建、插入以及删除
#include"node.h"void createList(School*& );void deleteNode(School*&,string);void insertNode(School*&,School*,int);void showList(School*);int main(){ School* head=NULL; createList(head);原创 2016-04-27 23:17:38 · 363 阅读 · 0 评论 -
排序算法1之插入排序
插入排序排序算法作为互联网找工作的必考的问题,现在得补补了。之前对排序算法有一些了解,有些排序算法看起来比较简单,但是真要自己手写code也不是那么容易的。所以纸上得来终觉浅,绝知此事要躬行。算法的三个特性时间效率,一般情况,当然希望排序算法越快越好。一般排序算法能达到Ω(n)\Omega(n)的时间复杂度就已经非常好了 。空间效率,受限于计算机的硬件条件,加上大数据处理问题日渐普原创 2015-12-20 15:02:11 · 451 阅读 · 0 评论 -
排序算法2之冒泡排序
冒泡排序冒泡排序原理很简单,实现也不难。作为一篇文章来写,确实有点不好意思,但是本人有着强迫症,所以还是单列一篇来总结冒泡排序。所谓冒泡,也可以理解为沉石子。前者就是形容排序的时候,每次将关键字最小的项目放到最前面,后者就是每次将关键字最大的项目放到最前面。所得到的结果一个是升序排列,一个是降序排列。冒泡排序是的时间复杂度Ω(n2)\Omega(n^2),空间复杂度Ω(n)\Omega(n),同时根原创 2015-12-20 22:20:27 · 355 阅读 · 0 评论 -
排序算法4之归并排序
归并排序归并排序是建立在归并操作上的一种排序算法,该算法采用分治的思想(divide and conquer)。就是先将序列进行分裂成一个个子序列,使得每个子序列都是有序的,然后再将所有的子序列整合成一个完整的序列。所以整个算法分为两部分,分裂和合并。分裂比较简单,最容易想到的就是折半分解,直至每个子序列是一个单独的数为止。合并就可能麻烦一点。合并 假设存在两个已经排列好的子序列{a1,a2,a3原创 2015-12-21 19:45:31 · 571 阅读 · 0 评论 -
运算符重载
运算符重载的意义运算符重载使得运算分量可以是类对象,甚至自己定义的类。最直观的好处就是使得代码更加直观、易懂。重载运算符的几点注意运算符重载时,要注意该重载运算符的运算顺序和优先级不变。c++规定,运算符中,参数说明都是内部类型时,不能重载。c++规定,“. 、::、* 、?、->”都不能重载。如何进行运算符重载我们以RMB这个类为例,重载+运算符:当作为一个非成员函数时:返回类型 ope原创 2016-03-06 20:29:02 · 588 阅读 · 0 评论 -
局部变量,静态局部变量,全局变量,静态全局变量在内存中的存放区别
概念首先得明白局部变量,静态局部变量,全局变量,静态全局变量这几个概念,以下面程序举例://main.cpp int a = 0; //全局变量static int b=0;//静态全局变量main() { int c; //局部变量static int d;//静态局部变量 }全局变量:具有全局作用域,全局变量只需在一个源文件中定义,就可以作用于所有的源文件。静态全局变量:具有全原创 2016-02-21 21:15:18 · 3832 阅读 · 0 评论 -
虚函数
虚函数的概念谈到虚函数就离不开“多态”,而面向对象语言的核心竞争力就是“多态”。因为“多态”大大缩短了程序员的开发周期,使得很多前辈的成果可以直接使用。而“多态”的三个必要条件: 多态的三个必要条件:1、要有继承(实现implements)2、要有重写(overWrite&overRide)3、父类引用指向子类对像class CMan{public:virtual void Eat(){……原创 2016-02-21 22:03:16 · 375 阅读 · 0 评论 -
经典算法
转自:v_JULY_v的博客:http://blog.csdn.net/v_JULY_v/article/details/6228235第一部分、来自圣经的十大算法当今世界,已经被发现或创造的经典算法数不胜数。如果,一定要投票选出你最看重的十大算法,你会作何选择列?有国外网友在StackExchange上发起过投票,让人们投票选出心目中最为经典的算法,最终产生了下面得票数最高的十大经典算法(投票数统转载 2016-02-21 22:30:54 · 522 阅读 · 0 评论 -
排序算法6之堆排序
本文主要参考: http://blog.csdn.net/morewindows/article/details/6709644/堆的定义二叉堆是完全二叉树或者是近似完全二叉树。 在这里补充一下,什么是完全二叉树: 完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 性质: 可以根原创 2016-02-28 22:48:04 · 327 阅读 · 0 评论 -
如何实现一个二维数组的转置
#include<iostream>#include<stdlib.h>#include<time.h>using namespace std;void printMatrix(int* ,int ,int );void tranMatrix(int* ,int ,int );int main(){ int A[5][5]={}; srand((unsigned)time原创 2016-04-26 15:26:55 · 9152 阅读 · 0 评论 -
霍夫曼树
定义:路径: 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。路径长度:路径上的分枝数目称作路径长度。树的路径长度:从树根到每一个结点的路径长度之和。结点的带权路径长度:在一棵树中,如果其结点上附带有一个权值,通常把该结点的路径长度与该结点上的权值之积称为该结点的带权路径长度(weighted path length)构造方法:霍夫曼树编码:#include<iostream>原创 2016-04-13 18:20:24 · 538 阅读 · 0 评论 -
入门GitHub
本文主要参考: http://blog.jobbole.com/73944/ 推荐一个比较好的博客:什么是GitHubRepository:仓库,我就理解为一个存储空间,里面存储了我们的code的历史版本,可以帮助我们很方便的找到历史版本。Branches:分支,也就是对同一代码,我们可能有不同的处理方式,这样我们就可以建立分支。Merged:融合or分支合并,也许两个子模块的分支可以合并原创 2016-02-16 14:48:31 · 339 阅读 · 0 评论 -
剑指offer4-(LCA)Lowest Common Ancestor
题目可以参考leetcode,写完顺便可以用leetcode OJ测试一下自己代码的正确性。这一题不难,一般的递归思想就可以解决。但当时面试京东的时候,别人总说我遍历了两次,能否只遍历一次?后来看剑指offer的面试题39:二叉树的深度,解法中利用后序遍历有提到每个节点只遍历一次,所以基于此我把LCM列为剑指offer,以供参考。/** * Definition for a binary tree原创 2016-10-05 15:23:24 · 575 阅读 · 0 评论