
c++
文章平均质量分 76
文如王勃三生慧
这个作者很懒,什么都没留下…
展开
-
数据结构专题——线段树
线段树转载请注明出处,谢谢!http://blog.youkuaiyun.com/metalseed/article/details/8039326 持续更新中···一:线段树基本概念1:概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操转载 2016-01-17 21:50:23 · 425 阅读 · 0 评论 -
C++设计模式(一):单例模式
单例模式单例模式: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决: 一个全局使用的类频繁地创建与销毁。何时使用: 想控制实例数目,节省系统资源的时候。如何解决: 判断系统是否已存在单例,如果有则返回,没有则创建。关键代码: 构造函数是私有的。单例大约有两种实现方法:懒汉与饿汉。懒汉: 故名思义,不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化,所以上边的经原创 2018-03-14 22:08:46 · 312 阅读 · 0 评论 -
LeetCode之Coin Change 和 Coin Change 2
1.Coin ChangeLeeCode链接:https://leetcode.com/problems/coin-change/description/你有不同面额的硬币和总金额。写一个函数来计算你所需要的最少的硬币数。如果这笔钱不能由硬币的任何组合构成,则返回-1。Example 1:coins = [1, 2, 5], amount = 11return 3 (11 = ...原创 2018-03-03 20:16:21 · 954 阅读 · 0 评论 -
排列组合算法总结(基于C++实现)
1.排列全排列n!1.1 递归法设一组数p = {r1, r2, r3, … ,rn}, 全排列为perm(p),pn = p – {rn}。则perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), … , rnperm(pn)。当n = 1时perm(p} = r1。如:求{1, 2, 3, 4, 5}的全排列1、首先看最后两个数4, ...原创 2018-03-06 00:19:05 · 40578 阅读 · 7 评论 -
C++11之智能指针
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer)。智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来)。C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr,std::we...原创 2018-03-27 17:42:20 · 344 阅读 · 0 评论 -
mac 安装与配置boost
1. 下载并解压boost安装包以boost 1.46.1为例: 在 https://www.boost.org/users/history/version_1_46_1.html 下载tar包并解压;2. 安装boost一部分组件在完成1和2以后就能直接用,因为很多是直接写在hpp的inline函数,但是要利用其它功能,需要build boost库里面的各个组件。2.1...原创 2018-07-16 17:41:03 · 1515 阅读 · 0 评论 -
自定义C++容器之LinkedHashMap
1. 背景虽然C++标准库提供了很多容器以供使用,但是实际上有时候其不能很好地满足一些较为特殊的需求,这时就需要自定义一些容器以满足实际的需要。在自定义一个容器之前,有必要先了解STL。因为STL中提供的容器的完备而优秀的设计,是容器代码的最好范本。2. STL六大组件容器(containers):各种数据结构,如vector,list,deque,set,map等,用来存放数据...原创 2018-08-23 13:21:01 · 5684 阅读 · 1 评论 -
boost.spirit之解析C++头文件
环境:win7_64旗舰版,VS2008场景:C++与lua交互是比较繁琐的,当我们编写一个C++类后,如果要给lua使用,就必须写一个lua包装类,将lua与原始C++类关联起来。其实这部分代码编写完全可以通过工具生成,前提是我们能解析C++头文件,然后根据解析出来的”类”和“函数”信息就可以自动生成相关的代码。cpp_class_grammar.h#pragma once#de...转载 2018-09-03 00:52:07 · 684 阅读 · 0 评论 -
C++ STL之排序函数总结
STL中更有很多函数十分常用,其中排序是使用最高频的函数之一,以下针对C++11的排序进行总结。1. 排序(sort)1.1 std::sort1.1.2 常用形式//用 operator< 比较元素。template< class RandomIt >void sort( RandomIt first, RandomIt last );/...原创 2018-09-16 00:23:44 · 2867 阅读 · 0 评论 -
C++ STL之查找函数总结
STL中更有很多函数十分常用,其中查找是使用最高频的函数之一,以下针对C++11的查找进行总结。1.查找(find)1.1 std::find()1.1.1 常用形式//C++20前template< class InputIt, class T >InputIt find( InputIt first, InputIt last, const T&...原创 2018-09-16 00:24:31 · 4394 阅读 · 1 评论 -
C++ 严格弱序
1.什么是严格弱序?C++ 关联容器的有序容器对元素关键字的类型有要求,元素关键字的类型必须定义了严格弱序(stick weak ordering)拿内置类型来说,C++都定义了“&amp;lt;”操作符,这就是一个严格弱序,而“&amp;lt;=”就不是一个严格弱序。2.严格弱序有什么用?对于内置类型我们自然可以有&amp;lt;、&amp;gt;、=来判断两个值的大小关系,而对于自定义的类类型,为它定义三种比...转载 2018-09-15 00:47:07 · 935 阅读 · 0 评论 -
遍历二叉树总结
1.递归遍历struct bnode{ char data; struct bnode *lchild,*rchild;};typedef bnode* bitre;//递归先序遍历void PreOrderRec(bitre root){ cout << root->data; PreOrderRec(root->lchild); PreOrder原创 2018-03-08 00:24:15 · 301 阅读 · 0 评论 -
值得推荐的C/C++框架和库
值得学习的C语言开源项目Libeventlibev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。下载链接:https://github.com/lib转载 2018-02-06 17:42:07 · 666 阅读 · 0 评论 -
常见排序算法总结(基于C++实现)
主流排序算法总结,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、树形选择排序、归并排序;原创 2018-01-16 18:30:37 · 3719 阅读 · 1 评论 -
字符串匹配(KMP算法)
题目描述:给定一个目标串str和模式串ptr,要求寻找ptr第一次在str出现的位置,并返回其下标,匹配不到则返回-1。1. 算法思想显然暴力算法的时间复杂度比较高,那么为了简化时间复杂度:需要充分利用模式串ptr的性质(比如里面部分字符串的重复性,即使不存在重复字段,在比较时,实现最大的移动量)。考察模式串ptr:ababaca 这里我们要计算一个长度为模式原创 2017-05-22 00:03:04 · 497 阅读 · 0 评论 -
字符串匹配(Boyer-Mooer 算法)
题目描述: 给定一个目标串str和模式串ptr,要求寻找ptr第一次在str出现的位置,并返回其下标,匹配不到则返回-1。1. 算法思想 在当前用于查找子字符串的算法中,BM(Boyer-Moore)算法是当前有效且应用比较广的一中算法,各种文本编辑器的“查找”功能(Ctrl+F),大多采用Boyer-Moore算法。比KMP算法快3~5原创 2017-05-23 00:03:36 · 836 阅读 · 1 评论 -
字符串匹配(暴力匹配)
题目描述:给定一个目标串str和模式串ptr,要求寻找ptr第一次在str出现的位置,并返回其下标,匹配不到则返回-1。暴力匹配(Brute force)暴力匹配的思路很简单,开始时用模式串ptr从匹配串str的第一个字符开始向后匹配,当出现不同字符时,从匹配串str的下一个字符开始重新匹配,即原搜索位置+1开始重新匹配。代码如下:原创 2017-05-22 00:02:26 · 836 阅读 · 0 评论 -
C++11之多线程初探
C++11在标准库中加入了std::thread以支持多线程编程,主要要用的头文件是: - :该头文件主要声明了 std::thread 类,另外 std::this_thread 命名空间也在该头文件中。 - :该头文件主要声明了与互斥量(mutex)相关的类,包括 std::mutex 系列类,std::lock_guard, std::unique_lock, 以及其他的类型和函数。1.创原创 2017-12-20 18:35:12 · 261 阅读 · 0 评论 -
C++命名规则
C++命名规则有很多种匈牙利命名法,即在变量和函数名中加入前缀以增进人们对程序的理解。1. 变量 类型 前缀 int n(i) unsigned int u(n) float或double f char和char* 表示字符串时用sz,表示指向单个字符的指针时可以用p String str Vector v Matrix mat Color clr原创 2017-12-05 12:15:36 · 964 阅读 · 1 评论 -
C++ 定义和使用接口类的简单模式
以一个Person类为接口类,Student类为实现类的代码为例:1. Person.h声明了Person类,PersonCreator类,并定义了一个全局变量用来创建Student对象#pragma onceclass Person{public: virtual ~Person() {} virtual void Eat() = 0; virtual void Slee原创 2017-12-14 14:13:10 · 2998 阅读 · 0 评论 -
C++ 类型转换
在C++中,如果两种类型有关联,那么就可以相互转换(conversion)。以加法运算为例,C++不会将两个不同类型的值相加,而是先根据类型转换规则设法先将运算对象统一后在求值。上述的类型转换是自动执行的,无须程序员的介入,因此被称为隐式转换(implicit conversion)。算术类型之间的隐式转换被设计得尽可能避免损失精度,例如,如果表达式中既有整数类型也有浮点数类型,那么整型会原创 2017-12-27 15:13:59 · 421 阅读 · 0 评论 -
c++ 基本数据类型总结
C++ 基本数据类型总结C 基本数据类型总结一 整型有符号整型无符号整型二 浮点型float4 Bytedouble 8 Byte例子float范围和精度double范围和精度c++定义了一套包括算术类型和空类型(void)在内的基本数据类型,这里只讨论算术类型。一. 整型1.有符号整型直接定义short,int,long,原创 2015-10-29 15:03:00 · 2432 阅读 · 2 评论 -
贷款计算器的简单实现(C++)
1. 等额本金当月还款 = (当前未还总额)*(月化利率) + (固定每月还款本金)例如,借款12万元,分12期还,年化利率为6%(月化利率为0.5%)那么固定每月还款本金为1万元,利息为:a_1 = 120000*0.5\% + 10000 = 10600a_2 = 110000*0.5\% + 10000= 10550a_3 = 100000*0.5\% + 10000= 105...原创 2019-03-03 23:29:54 · 5012 阅读 · 0 评论