![](https://img-blog.csdnimg.cn/20191219140331616.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
编程之美:C/C++
文章平均质量分 74
C++入门和进阶
图灵的猫.
给行业以ai,而不是给ai以行业
展开
-
C语言:判断回文字符串的两种简单方法
另一种是数字输入,因为追求简便性所以此方法只能判断回文数,不能判断回文字符串。要想都判断也很简单,将变量类型调整即可实现。之前写过逆排序的数组实现,对于经典的回文问题却还没有深入研究过。今天抽空看了下,总结了两种比较常用的回文法。一种是字符串(当然也可以叫数组法),此方法可以用来判断字符串输入以及INT类型的输入。原创 2018-01-12 20:34:33 · 62335 阅读 · 5 评论 -
有趣的算法(七):3分钟看懂希尔排序(C语言实现)
在上一次的算法讨论中,我们一起学习了。它的原理就是把前i个长度的序列变成有序序列,然后循环迭代,直至整个序列都变为有序的。但是说来说去它还是一个时间复杂度为(n^2)的算法,难道就不能再进一步把时间复杂度降低一阶么?确实,以上几种算法相对于之前的O(n^2)级别的算法真的是弱,效率可能还会差上千万倍,但是我们不妨翻看一下历史,你就会感觉每一种算法的出现都是很可贵的。原创 2018-03-17 18:11:35 · 10111 阅读 · 3 评论 -
有趣的算法(八):3分钟看懂选择排序(C语言实现)
我的机器学习教程「美团」算法工程师带你入门机器学习 以及「三分钟系列」数据结构与算法已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~...原创 2018-03-18 18:03:42 · 355 阅读 · 0 评论 -
多进程|多线程的不同应用场景:Python还是C
这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。假设你打算切换到多任务模型,可以先做1分钟语文,再切换到数学作业,做1分钟,再切换到英语,以此类推,只要切换速度足够快,这种方式就和单核CPU执行多任务是一样的了,以幼儿园小朋友的眼光来看,你就正在同时写5科作业。所以,多任务一旦多到一个限度,就会消耗掉系统所有的资源,结果效率急剧下降,所有任务都做不好。原创 2018-04-08 14:06:12 · 1907 阅读 · 0 评论 -
Python面向对象中的多态与静态语言(C++,Java)的区别
结果fn被复写,而没有实现多态。原创 2018-03-31 21:44:09 · 1168 阅读 · 0 评论 -
python中的struct
struct是python(包括版本2和3)中的内建模块,它用来在c语言中的结构体与python中的字符串之间进行转换,数据一般来自文件或者网络。原创 2018-04-05 19:08:28 · 737 阅读 · 0 评论 -
什么是元编程(meta-promgramming)?
抠定义的话是这样吧。除非程序的运行期的输入数据会被直接或间接转化成代码,否则元编程不会给程序带来新的逻辑(信息论原理),此时它本质上是一种(让程序员自我感觉良好的)手工压缩源代码技术。换言之,一种语言本来做不到的事情,通过你编程来修改它,使得它可以做到了,这就是元编程。泛泛来说,只要是与编程相关的编程就算是 meta-programming 了——比如,若编程甲可以输出 A - Z,那么写程序甲算「编程」;相对于新创造的领域专用语言DSL来说, Ruby语言就成为其的元语言,所以叫做元编程。原创 2018-05-24 12:30:52 · 6931 阅读 · 1 评论 -
C/C++面试宝典:虚函数与纯虚函数
参考《C/C++程序员面试宝典》原创 2018-07-14 17:25:43 · 701 阅读 · 0 评论 -
Linux学习笔记(七):Shell与Shell Script
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。Shell 脚本(shell script),是一种为 shell 编写的脚本程序。原创 2018-03-14 22:16:53 · 7916 阅读 · 0 评论 -
经典:一文详解socket
上面我们已经知道网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭),这些函数我们在后面进行介绍。原创 2018-02-08 17:47:50 · 687 阅读 · 0 评论 -
内存、cache和寄存器之间的关系及区别
是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。3. 寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,,常见的容量有256KB或512KB L2 Cache。,L2 Cache早期一般是焊在主板上,原创 2018-01-12 22:51:27 · 5931 阅读 · 1 评论 -
判断一个单链表是否有环及环的链接点
3中求出了连接点的位置,就可以求出头结点到连接点的长度。在环上相遇后,记录第一次相遇点为Pos,之后指针slow继续每次走1步,fast每次走2步。在环上相遇后,记录第一次相遇点为Pos,连接点为Join,假设头结点到连接点的长度为。,因此,分别从第一次碰撞点Pos、头指针head开始走,相遇的那个点就是连接点。在下次相遇的时候fast比slow正好又多走了一圈,也就是多走的距离等于环长。第一次碰撞点Pos到连接点Join的距离=头指针到连接点Join的距离。第一次相遇时,fast走的长度 2S =原创 2018-01-12 23:03:36 · 625 阅读 · 0 评论 -
Python与C:指针与按址传递
不得不佩服作者的创造力,自己曾经也被c语言的指针整的焦头烂额。网上很多c#和python的比较,但是我要说的是,这两种语言设计思路从最核心,最底层的解决思路是不一样的。总而言之:python把一切数据,一切的一切都看作对象,在python中,没有变量,只有指针,要说变量,也是指针变量。看看,a =5 在c中是非常普通的赋值,我们也通常把这个语句叫做赋值语句,但是在python中,这样的理解就错了。是不是很奇怪,一个类,或者对象是不可以用数字来命名的,但是作为对象实例化,或者类的实例化,问题就很好理解了。原创 2018-01-13 21:16:44 · 4890 阅读 · 1 评论 -
Python入门之类与面向对象(一)
我的机器学习教程「美团」算法工程师带你入门机器学习 以及「三分钟系列」数据结构与算法已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~...原创 2018-01-13 22:50:36 · 397 阅读 · 0 评论 -
C语言:指向指针的指针
问题:如何理解指向指针的指针?我在一篇教程中看到下面这段,它描述指向指针的指针是如何运作的。引用文章相关段落如下:C12int i = 5, j = 6, k = 7;int *ip1 = &i, *ip2 = &j;现在我们可以这么写:C翻译 2018-01-05 18:00:36 · 470 阅读 · 0 评论 -
C语言中的main函数为什么被称作程序入口
在接下来的五个函数执行中,都可以看到前面ConsoleApplication3开头,这个是我们的程序文件名,这表示这几个函数都是为我们程序服务的,这些都是运行在我们程序的进程空间的,其实就是我们程序所占的内存块中。操作系统的安排,启动运行时库,运行时库再初始化好环境,然后启动你的入口函数,你的程序才正常的运行起来。如果你看到的不是这样的,有很多问号的,或者显示什么不可用符号等等,在对应的那条上面,右击点击显示或导入“符号”的菜单,然后VS自动更新符号,这样就可以显示出这些函数分符号名了。原创 2018-01-07 11:04:18 · 3678 阅读 · 0 评论 -
数据结构与算法(一):线性表、栈、树(二叉树,AVL树)、图
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。原创 2018-01-08 21:55:03 · 1542 阅读 · 0 评论 -
数据结构与算法(二):线性表、栈、树(二叉树,AVL树)、图
树型结构是一类非常重要的非线性数据结构,其中以树和二叉树最为常用。在介绍二叉树之前,我们先简单了解一下树的相关内容。树树 是由n(n>=1)个有限节点组成一个具有层次关系的集合。它具有以下特点:每个节点有零个或多个子节点;没有父节点的节点称为 根 节点;每一个非根节点有且只有一个 父节点 ;除了根节点外,每个子节点可以分为多个不相交的子树。树的结构二叉树基本概念 定义二叉树是每个节点最多有两棵子树的树结构。通常子树被称作“左子树”和“右子树”。二叉树常被用于实现二叉查找树和二叉堆。相关原创 2018-01-17 13:56:28 · 1025 阅读 · 0 评论 -
C语言Register关键字:利用寄存器提升访问效率
这里要说明的一点是:小太监是主动的从大臣手里接过奏章,然后主动的交给皇帝同志,但寄存器没这么自觉,它从不主动干什么事。由于寄存器的数量有限,而且某些寄存器只能接受特定类型的数据(如指针和浮点数),因此真正起作用的register修饰符的数目和类型都依赖于运行程序的机器,而任何多余的register修饰符都将被编译程序所忽略。你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你。例如下面的内存块拷贝代码,原创 2018-01-08 20:12:03 · 3580 阅读 · 0 评论 -
有趣的算法(四)最通俗易懂的KMP算法解析
Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。原创 2018-02-26 21:01:50 · 1926 阅读 · 0 评论 -
动态规划C语言实现之最长公共子序列(LCS)
动态规划中,我曾对于01背包和硬币问题有过一些理解,今天参考了博客上其他同学的经验,完成了最长公共子序列LCS的代码实现。上面都是摘自《算法导论》,如果熟悉这两个内容,那么实现起来就方便许多。2.状态转移表(数组用来存放位置和长度)原创 2018-02-06 23:09:28 · 15978 阅读 · 2 评论