C++
Michael-zhou
目前就读于北京邮电大学。
展开
-
浅谈C++多态性
C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义转载 2016-03-29 14:17:13 · 297 阅读 · 0 评论 -
C++ map排序(按照value值排序)
正常的map默认按照key值排序,而map又没有像vector一样的sort()函数,那么如果将map按照value值排序呢?有两种方法:1、将map中的key和value分别存放在一个pair类型的vector中,然后利用vector的sort函数排序,其中map_verb存放我的map值: 最重要是vector的sort函数~~(用sort函数需要引入头文件 #include <algorit转载 2016-04-28 09:51:48 · 1538 阅读 · 0 评论 -
Count Primes [LeetCode 解题报告]
题目描述: 给定n,返回小于n的素数的个数。 解题思路: 1)地毯式搜索(TLE) 即:统一从2到根号n的所有数中素数的个数,太暴力了,没过测试! 2)上下素性判别法(貌似是这个名字,TLE) 大于3的所有素数都可以表示成6*k+1或者6*k-1的形式,从而只从满足这个条件的数中进行地毯式筛选,无奈还是TLE。。。。 3)迭代向后筛选法(名字自创的,哈哈!!重点是理解思路就行) 首先原创 2016-05-11 10:53:35 · 423 阅读 · 0 评论 -
二叉树上最长单色路径
题目:对于一棵由黑白点组成的二叉树,我们需要找到其中最长的单色简单路径,其中简单路径的定义是从树上的某点开始沿树边走不重复的点到树上的另一点结束而形成的路径,而路径的长度就是经过的点的数量(包括起点和终点)。而这里我们所说的单色路径自然就是只经过一种颜色的点的路径。你需要找到这棵树上最长的单色路径。 给定一棵二叉树的根节点(树的点数小于等于300,请做到O(n)的复杂度),请返回最长单色路径的长度原创 2016-04-20 10:49:06 · 1142 阅读 · 0 评论 -
Trie树 [Hihocoder]
输入 输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词。接下来的一行为一个正整数m,表示小Hi询问的次数,其后m行,每一行一个字符串,该字符串由不超过10个的小写英文字母组成,表示小Hi的一个询问。在20%的数据中n, m<=10,词典的字母表大小<=原创 2016-04-20 10:54:49 · 375 阅读 · 0 评论 -
用Google的gflags优雅的解析命令行参数
写了这么多年的Linux下C/C++代码,一直使用getopt_long来解析命令行参数,同时定义一个全局的struct来保存各个命令行参数的值。虽然用得比较“繁琐”,但也安于现状。最近突然发现了Google早在多年前就开源了一个解析命令行参数的“神器”gflags。赶紧来爽一把。安装 1、去官网下载一个最新的版本(gflags-2.1.1.tar.gz)。2、现在流行cmake的构建方式,gfl转载 2016-06-03 09:50:43 · 12703 阅读 · 1 评论 -
堆排序
在堆排序中最重要的一个操作就是heapAdjust(),不管是建堆还是维护堆,都需要时时刻刻的进行heapAdjust(),那什么是heapAdjust()呢,这个函数的主要作用是保证堆中的任意父节点都大于其子节点(这里特指大顶堆,还有小顶堆,与之相反),在每次swap()后都需要利用这个函数,来保证新的堆顶的元素也满足这样的特性。在建堆的目的也是为了使得所有节点满足:任意父节点大于其子节点的值,所原创 2016-07-22 19:04:54 · 1585 阅读 · 0 评论 -
typedef的用法总结
为了方便下次查找,在此做一个总结记录:typedef一般有四个用途用途一定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同转载 2016-07-16 11:23:05 · 648 阅读 · 0 评论 -
蓄水池抽样-Random Pick Index
问题:如何随机从n个对象中选择一个对象,这n个对象是按序排列的,但是在此之前你是不知道n的值的。 思路:如果我们知道n的值,那么问题就可以简单的用一个大随机数rand()%n得到一个确切的随机位置,那么该位置的对象就是所求的对象,选中的概率是1/n。 但现在我们并不知道n的值,这个问题便抽象为蓄水池抽样问题,即从一个包含n个对象的列表S中随机选取k个对象,n为一个非常大或者不知道的值。通常情况原创 2016-09-16 15:09:29 · 552 阅读 · 0 评论 -
卡特兰数
一个童鞋跟我提过一个问题:说1-12 这 12 个数,分成 2 组,然后每组按大小排序,其中一组中的数总是比另外一组中对应顺序的数要大,问有多少种情况?我还真做不出来,他告诉 me 说这是Catalan数。即使他这么说,me 貌似还是不太明白。不过这不影响,me 简单搜索一下这个数(其实me以前就有所耳闻),有好几个用处,简单罗列一下。平衡括号平衡括号:在一个合法的算术表达式中可以出现的括号都是平衡转载 2016-09-16 15:31:37 · 368 阅读 · 0 评论 -
AC自动机
#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <vector>#include <utility>using std::string;using std::vector;using std::pair;using std::make_pair;#define CHAR_原创 2016-10-11 21:47:27 · 430 阅读 · 0 评论 -
C++-内存管理(整理笔记)
C++内存管理详解 l 内存分配方式 在C++中,内存分成5个区,分别是堆、栈、自由存储区、全局/静态区和常量存储区. 栈:存放函数参数以及局部变量,在出作用域时,将自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但分配的内存容量有限. 堆:new分配的内存块(包括数组,类实例等),需delete手动释放.如果未释放,在整个程序结束后,OS会帮你回收掉. 自由转载 2016-03-28 23:59:04 · 326 阅读 · 0 评论 -
C++11 之for 新解
前言 C++11这次的更新带来了令很多C++程序员期待已久的for range循环,每次看到javascript, lua里的for range,心想要是C++能有多好,心里别提多酸了。这次C++11不负众望,再也不用羡慕别家人的for range了。使用场景 ex1:遍历字符串std::string str = “hello, world”;for(auto ch : str) {原创 2016-04-13 15:59:43 · 427 阅读 · 0 评论 -
c++中的.hpp文件
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该cpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。1转载 2016-03-15 15:14:27 · 394 阅读 · 0 评论 -
C++ map的基本操作
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作! 1. map最基本的构造函数; map<string , int >mapstring; map<int ,string >mapint; map<sring, char>mapstring; map< char ,s转载 2016-03-21 09:59:34 · 378 阅读 · 0 评论 -
贪吃蛇小游戏 C++实现
#include<iostream>#include<windows.h>#include<time.h>#include<conio.h>using namespace std;// 刷新当前屏幕inline void Refresh(char q[][22], int grade, int gamespeed){ system("cls"); // 清屏 int转载 2016-04-05 09:47:41 · 4723 阅读 · 1 评论 -
static作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容[cpp] view plain cop转载 2016-03-13 10:10:32 · 396 阅读 · 0 评论 -
C++中const详解
为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名 常对象: 类名 const 对象名 常成员函数:转载 2016-03-13 11:31:57 · 443 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2016-03-13 11:34:17 · 374 阅读 · 0 评论 -
int,long,long long范围
unsigned int 0~4294967295 int 2147483648~2147483647 unsigned long 0~4294967295 long 2147483648~2147483647 long long的最大值:9223372036854775807 long long的最小值:-9223372036854775808 unsigned lo原创 2016-04-06 10:38:27 · 571 阅读 · 0 评论 -
详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo转载 2016-03-13 11:35:08 · 381 阅读 · 0 评论 -
typedef函数指针用法
1.简单的函数指针的应用形式1:返回类型(*函数名)(参数表) [cpp] view plain copychar (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun转载 2016-03-13 16:44:39 · 414 阅读 · 0 评论 -
C语言宏定义和宏定义函数
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX(原创 2016-03-13 19:55:59 · 8113 阅读 · 1 评论 -
微软100题(1)——二叉树与双向链表
题目要求:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解决思路: 1. 根据观察可知,双向链表顺序即为二叉树的中序遍历结果----->采用中序遍历+递归; 2. 中序遍历顺序为:左+中+右; 3. 整体思路:定义一个指针p,初始化为空指针,然后采用中序遍历,将当前访问点的左指针指向当前的p指针指向的节点,如果p指原创 2016-03-14 16:16:21 · 544 阅读 · 0 评论 -
基于Caffe的CNN剪枝
背景传统的CNN网络训练完之后,全连接层的权值矩阵动辄就几十万、几百万个参数值,可见CNN模型的庞大,但是仔细观察CNN的权值矩阵就会发现,里面有很多的参数的绝对值都很小,比如在-0.001到0.001之间,也就是说这些连接对CNN的训练或者测试结果作用很小,因此我们就可以尝试将这些小值参数去掉,既可以减小模型的规模又可以减少计算量,最重要的前提是要保证CNN的有效性,也即正确率。主要原创 2016-07-05 17:03:45 · 15984 阅读 · 136 评论