
C/C++
明天也要加油鸭
加油,加油,再加油!
展开
-
位运算实现加减乘除四则运算
目录加法减法乘法除法计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实也就是高低电平。无论多么复杂的逻辑、庞大的数据、酷炫的界面,最终体现在计算机最底层都只是对0101的存储和运算。加法不考虑进位情况下,位的异或运算跟求'和'的结果一致:异或 1^1=0 1^0=1 0^0=0求和 1+1=0 1+0=1 0...原创 2019-04-22 09:20:51 · 2364 阅读 · 0 评论 -
【动态规划】01背包问题(通俗易懂,超基础讲解)
目录总体思路动态规划的原理背包问题的解决过程代码实现背包问题最优解回溯代码实现有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?为方便讲解和理解,下面讲述的例子均先用具体的数字代入,即:eg:number=4,capacity=8i(物品编号) 1 2 3 4 w(体积) 2 ...转载 2019-04-29 21:53:31 · 483 阅读 · 0 评论 -
C++全排列组合算法
题目描述给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。输入描述:输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出描述::输出这个字符串的所有排列方式,每行一个排列。要求字母序比...原创 2019-05-14 21:30:51 · 2158 阅读 · 0 评论 -
C++11 NULL和nullptr
众所周知,C语言使用NULL常量来表示空指针,为什么C++11还要增加新的nullptr来表示空指针呢? 1,我们首先查看NULL的定义:#if defined (_STDDEF_H) || defined (__need_NULL)#undef NULL /* in case <stdio.h> has defined it. */#if...原创 2019-05-15 10:11:34 · 535 阅读 · 0 评论 -
【推荐】值得学习的C/C++语言开源项目
值得学习的C语言开源项目-1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webben...转载 2019-06-25 10:39:05 · 1390 阅读 · 0 评论 -
友元
友元的概念和定义遵循一定规则而使对象以外的软件系统能够不经过消息传递方式直接使用访问对象内封装数据成员的技术方法便是友元,友元是面向对象系统与面向过程系统衔接的纽带。只要对外界的某个对象说明为一个类的友元,那么这个外界对象就可以访问这个类对象中的私有成员。友元函数友元函数是一种说明在类定义体内的非成员函数,说明友元函数的方法如下:friend<返回值类型><函数...原创 2017-07-20 17:34:00 · 248 阅读 · 0 评论 -
虚函数和纯虚函数
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public: virtual void Eat(){……}; void Move();...原创 2017-07-20 20:59:00 · 300 阅读 · 0 评论 -
string字符串
string提供字符串的功能,使用时需要引入头文件<string>,string和vector类似,vector是对数组的封装,而string是对字符串的封装。从面向对象角度来讲,C风格字符串是难以操控的。所以STL里提供了面向对象的string封装。string内部仍然是维护一个char型数组,并且也是以0结尾的。对外提供了字符串操作常用的函数,如append、clear、at、...原创 2017-07-19 10:07:00 · 185 阅读 · 0 评论 -
C/C++函数库
C 语言中有大量的标准库函数,根据功能不同,声明于不同的头文件中。这些库函数在C++中也能使用。下面分类总结了一些C 语言常用库函数。一、数学库函数C语言数学库函数声明在 math.h 中,C++是cmath。abs(x) //求整型数x 的绝对值cabs(struct complex znum) //返回复数znum的绝对值cos(x) //x(弧度)的...原创 2017-07-13 21:36:00 · 313 阅读 · 0 评论 -
C++多台——静态多态和静态多态
0. 提出问题什么是多态?多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。多态氛围哪几类?多态可以分为静态多态和动态多态。1. 静态多态又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数。例如:函数的重载,对象名加点操作符执行成员函数,类成员运算符指定的运算等,都是静态多态,其中,重载是在形成符号表的时候,对...原创 2019-06-21 20:11:55 · 2951 阅读 · 0 评论 -
思考:对一亿个int型整数排序,哪种排序算法效率最高?
下图是常见排序算法的最好,最坏,平均时间复杂度、空间复杂度,稳定性总结表。直接看表格,综合时间复杂度、空间复杂度等各种因素,目测堆排序是最优选择。不管最好、最坏还是平均情况,时间复杂度都是O(nlogn),而且还不像快排排序和归并排序那样占空间,计数排序、基数排序、桶排序空间复杂度太大,需要消耗大量额外空间。快速排序和堆排序接下来亲自比较一下,快速排序和堆排序到底谁效率更高。附上...原创 2019-06-22 11:13:48 · 4832 阅读 · 0 评论 -
一个makefile的例子
参考假设我们有一个程序由5个文件组成,源代码如下:/*main.c*/#include"mytool1.h"#include"mytool2.h"intmain(){mytool1_print("hello mytool1!");mytool2_print("hello mytool2!");return0;}/*mytool1.c*...原创 2019-06-26 15:45:57 · 443 阅读 · 0 评论 -
自由存储区和堆
自由存储区和堆的区别是一个老生常谈的问题了,就像面试题new和malloc的区别一样。事实上,网上多说人认为,自由存储区与堆的划分标准是申请和释放内存是使用的new/delete还是malloc/free。C++标准并没有给出new/delete应该如何实现,但很多编译器的new/delete都是以malloc/free为基础来实现的。从技术上来说,堆(heap)是C语言和操作系统的术语,堆是操作...转载 2019-08-14 09:18:24 · 387 阅读 · 0 评论 -
四种线程同步(或互斥)方式小结
一,什么是线程同步和互斥同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。这里的同步千万不要理解成那个同时进行,应是指协同、协助、互相配合。线程同步是指多线程通过特定的设置(如互斥量,事件对象,临界区)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的!线程互斥是指对于共享的进程系统资源,在各单个线...转载 2019-08-22 11:25:02 · 3039 阅读 · 0 评论 -
浅谈strcpy和strncpy
strcpy和strncpy1. strcpy函数:顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dest(地址中存储的为复制后的新值)。要求:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。一般...原创 2017-07-13 20:57:00 · 251 阅读 · 0 评论 -
动态规划——最长公共子序列
问题描述:给定两个字符串str1和str2,返回两个字符串的最长公共子序列,例如:str1 = “1A2C3D4B56”,str2 = "D23CA45B6A",,“123456”或者“12C4B6”都是最长公共子序列,返回哪一个都行。如果str1的长度为M,str2的长度为N,生成M*N的矩阵dp。dp[i][j]的含义是str1[0...i]与str2[0...j]的最长公共子序列。...原创 2019-04-09 15:47:15 · 367 阅读 · 0 评论 -
C语言内存分配及各种数据存储位置
版本声明:本文转载于公众号TeachPlus指针的使用,一直是c语言面试题中必考的部分,因为指针本身使用的复杂性与普适性,所以考点非常多,而且也可以与其他知识相互结合,因此我们将会使用五篇专题的篇幅来介绍指针。分析下面的程序,指出程序中的错误:[cpp] view plain copy#&...转载 2019-03-15 15:54:17 · 838 阅读 · 0 评论 -
extern “C”
extern "C"extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。...原创 2019-03-15 16:52:00 · 187 阅读 · 0 评论 -
C++中四大强制类型转换!
C++中有四中强制类型转换:static_cast,const_cast,reinterpret_cast,dynamic_cast,下面来逐一解释。1)static_cast<T* >(a)将地址a转换成类型T,T和a必须是指针、引用、基本数据类型或枚举类型。在运行时转换过程中,不进行类型检查来确保转换的安全性。class B { ... };class D : p...原创 2019-03-19 22:51:07 · 630 阅读 · 0 评论 -
C++虚函数表剖析
转载自:https://blog.youkuaiyun.com/lihao21/article/details/50688337关键词:虚函数,虚表,虚表指针,动态绑定,多态目录一、概述二、类的虚表三、虚表指针四、动态绑定五、总结参考资料一、概述为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态...转载 2019-03-20 10:51:25 · 265 阅读 · 0 评论 -
十种排序算法详解及C++实现
目录算法概述冒泡排序选择排序希尔排序堆排序插入排序归并排序基数排序计数排序桶排序快速排序算法概述十大排序算法可以分为两大类:比较类排序:通过互相比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间排序; 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运...原创 2019-03-15 22:48:42 · 594 阅读 · 2 评论 -
算法的时间复杂度和空间复杂度
目录一、算法效率的度量方法1.事后统计方法2.事前分析估算方法二、函数的渐近增长三、算法时间复杂度1.算法时间复杂度的定义:2.推导大O阶方法四、函数调用的时间复杂度分析五、最坏情况与平均情况六、算法的空间复杂度一、算法效率的度量方法1.事后统计方法这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,...转载 2019-03-25 19:47:07 · 337 阅读 · 0 评论 -
单向链表
单向链表C++class IntSLLNode{public: IntSLLNode() { next = 0; } IntSLLNode(int i, IntSLLNode *in = 0) { info = i; next = in; } int info; IntSLLNode *next;private:};class IntSLList{...原创 2019-03-19 10:48:49 · 168 阅读 · 0 评论 -
c++线程中的几种锁
1、互斥锁互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作一个共享资源。例如线程池中的有多个空闲线程和一个任务队列。任何是一个线程都要使用互斥锁互斥访问任务队列,以避免多个线程同时访问任务队列以发生错乱。在某一时刻,只有一个线程可以获取互斥锁,在释放互斥锁之前其他线程都不能获取该互斥锁。如果其他线程想要获取这个互斥锁,那么这个线程只...原创 2019-03-31 21:55:37 · 1005 阅读 · 0 评论 -
进程和线程
不同点1、首先是定义进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。2、一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。3、线程是一种...原创 2019-03-31 22:20:58 · 137 阅读 · 0 评论 -
STL四种智能指针
目录1.unique_ptr2.auto_ptr3.shared_ptr3.1shared_ptr简介3.2通过辅助类模拟实现shared_ptr4.weak_ptr4.1weak_ptr简介4.2用法4.3weak_ptr的作用5.如何选择智能指针参考文献https://blog.youkuaiyun.com/k346k346/article/detai...转载 2019-04-10 19:31:13 · 585 阅读 · 0 评论 -
算法-动态规划 Dynamic Programming
算法-动态规划 Dynamic Programming--从菜鸟到老鸟https://blog.youkuaiyun.com/u013309870/article/details/75193592最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic Programming)算法的题目很多。相对于我来说,算法里面遇到的问题里面感觉最难的也就是动态规划(Dynamic Programming...转载 2019-04-08 10:05:27 · 207 阅读 · 0 评论 -
动态规划——走方格
问题描述:给定一个矩阵m,从左上角开始每次只能向下或者向左走,最后到达右下角的位置,路径上的数字累加起来就是路径和,返回所有路径中最小路径和。如果给定矩阵如下,则路径1,3,1,0,6,0是所有路径中路径和最小的,所以返回12.。 1 3 5 ...原创 2019-04-08 22:28:05 · 2468 阅读 · 4 评论 -
动态规划——最长递增子序列
问题描述:给定数组p,返回p的最长公共递增子序列长度,比如p={ 2,1,5,3,6,4,8,9,7 },最长公共子序列为{1,3,4,8,9},所以返回长度为5.设dp[i]表示L中以ai为末元素的最长递增子序列的长度。则有如下的递推方程:这个递推方程的意思是,在求以ai为末元素的最长递增子序列时,找到所有序号在L前面且小于ai的元素aj,即j<i且aj<ai。如果这样的元素...原创 2019-04-09 09:59:20 · 3518 阅读 · 0 评论 -
动态规划——最小编辑代价
问题描述:给定两个字符串str1和str2,再给定三个整数ic,dc,rc,分别代表插入、删除、替换一个字符的代价,返回将str1编辑成str2的最小代价。举例:str1="abc" str2="adc" ic=5 dc=3 rc=2,从"abc"编辑到"adc"把b替换成d代价最小,为2;str1="abc" str2="adc" ic=5 dc=3 rc=...原创 2020-04-11 12:24:13 · 390 阅读 · 0 评论 -
栈(stack)的实现
栈的vector实现#include<vector>using namespace std;template <class T,int capacity = 30>class stack{public: stack() { pool.reserve(capacity); } void clear() { pool.clear(); }...原创 2019-03-19 15:50:49 · 175 阅读 · 0 评论