
C++
夏虫爱语冰
这个作者很懒,什么都没留下…
展开
-
C++踩坑之重定义默认参数(默认实参)
C++函数可以带有默认参数,调用含有默认参数的函数,可以包含实参,也可以省略实参。我们可以为函数一个或多个形参提供默认值,但是一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值,因为函数调用时按位置解析实参,默认实参负责填补函数调用缺省的尾部实参。void f(int a,int b,int c=0){}; //定义一个函数f(1,2); //c使用默认实参值0f(1,2,3); //c使用实参3问题来了,假如一个函数有默认实参,由于习惯将函数声明放在.hpp/.h而函数定义.cpp原创 2020-10-27 23:28:58 · 2311 阅读 · 1 评论 -
C++ 快速获取文件夹(目录)下的所有文件名
说起使用C++操作文件,最常见的是当属对单一文件进行读写了,但有时我们需要一个目录下的所有文件又该怎么快速获取呢?这个问题的难点在于如何查找文件目录下的文件及其数量,以及如何递归查找目录下的子目录的文件及其数量。我一下子就懵了,赶紧打开搜索引擎,在互联网上找了一圈,发现核心代码几乎都是同一段(原作者已不可考究):#include <iostream>#include <string>#include <vector>//注意这个头文件#include <原创 2020-10-21 21:54:21 · 21645 阅读 · 7 评论 -
设计一个简单的LRU缓存结构(C++实现)
LRU是Least Recently Used的缩写,中文意思是“最近最少使用”,常用于页面置换算法,是为虚拟页式存储管理服务的。LRU 算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。LRU实现过程Created with Raphaël 2.2.0开始新元素缓存区已满?去掉最近最少使用的元素写入新元素到缓存区结束直接写入新元素到缓存区yesno主要使用哈希表和链表,其中哈希表用于查找原创 2020-10-07 15:38:24 · 848 阅读 · 0 评论 -
二叉树之二叉查找(搜索)树的查找、插入、删除及遍历(C++实现)
目录一、认识二叉树查找(搜寻或搜索)树二、二叉查找树的查找实现三、二叉查找树的插入实现四、二叉查找树的删除实现一、认识二叉树查找(搜寻或搜索)树二叉查找树1(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于或等于它的根节原创 2020-08-18 22:29:31 · 8157 阅读 · 0 评论 -
二叉树之层序遍历C++实现(部分C++11)
上一篇文章主要讲了二叉树的前中后序遍历算法的递归非递归实现,本文介绍二叉树的另一种遍历方式——层序遍历。层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第二层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程。具体使用一个先进先出的队列来实现,基本过程为:根节点入队,然后:从队列中取出一个节点访问该节点若该节点所指节点的左、右子树非空,则将其左右子树顺序入队首先实现一个队列,采用链式存储(队列的链式存储结构,其实就是线性表的原创 2020-08-10 21:12:43 · 518 阅读 · 0 评论 -
二叉树之先(前)序、中序、后序遍历的递归和非递归C++实现(部分C++11)
目录一、认识二叉树二、二叉树的先(前)序、中序、后序遍历的递归实现三、二叉树的先(前)序、中序、后序遍历的非递归实现一、认识二叉树在进入本文之前先要对二叉树有一定的了解,引用中文维基百科的说法:二叉树是计算机科学中一种数据结构。在计算机科学中,二叉树(英语:Binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。二叉树通常作为数据结构应用,典型用法是对节点定义一个标记函数,将一些值与每原创 2020-08-09 10:40:16 · 515 阅读 · 1 评论 -
关于C++插入迭代器(插入器)的那些事
插入器是一种迭代器适配器,它接受一个容器,生成一个迭代器,能实现向给定容器添加元素。其实**适配器的本质就是实现不变,改变接口**。例如容器适配器可以使一个容器vector表现得像一个stack一样,这里的迭代器适配器也是如此。插入器有三种类型,差异在于元素插入的位置:back_inserter 创建一个使用push_back的迭代器。front_inserter 创建一个使用push_...原创 2020-04-21 18:03:21 · 904 阅读 · 0 评论 -
C++标准库bind函数知一二
对可调用对象(函数指针,仿函数,lambda表达式等)进行参数绑定,C++11提供了名为bind的标准库函数,它定义在头文件functional中。bing函数可以看作是一个通用的函数适配器,它可以接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表。调用bind的一般形式为:auto newCallable = bind(callable, arg_list)其中,newC...原创 2020-04-15 15:59:30 · 427 阅读 · 0 评论 -
利用逆波兰式(后缀表达式)求解带括号数学表达式的值
一、前言本文主要记录笔者在学习C++适配器相关内容时解决的一道练习题,亦是有抛砖引玉之意~二、正文一般我们常用的数学表达式形式,像(a+b)*c等把加减乘除等运算符放在中间的称呼为中缀表达式。但是中缀表达式的运算顺序受括号影响很大,那有没有可以无视的括号的表达形式呢?答案是肯定的,那就是逆波兰表达式,也叫后缀表达式。引用百度百科的定义:一个表达式E的后缀形式可以如下定义:(1)如果...原创 2020-04-10 11:38:19 · 2213 阅读 · 0 评论 -
关于常量指针和指向常量的指针的一点说明
近日笔者在中文网络搜索常量指针这一词条时,发现很多解释(说明)完全弄反了,故结合《C++ Primer》中文版(第五版)对相关名词加以阐释:一、常量指针(const 指针)指针本身是对象,故可以像其他对象类型一样把指针本身定为常量,即为常量指针(const pointer)。注意:常量指针必须初始化,而且一旦初始化完成,则它的值(即存放在指针中的地址)就不能再改变了。也就是说常量指针不变的是...原创 2020-03-08 14:48:32 · 511 阅读 · 0 评论