C++
失忆的鱼
这个作者很懒,什么都没留下…
展开
-
表驱动优化if-else[c++]
一、表驱动是什么?表驱动是一种编程模式,是一种将输入变量作为索引在表里查找直接的结果或者处理函数,而不是用很多的逻辑语句来进行判断(比如if-sle||switch_case).索引表可以是个数组、map或者其他高效率查找的数据结构。二、表驱动实现方式下面通过加减乘除来实现一个简易计算器,先用未优化的switch-case来实现:#include <iostream>#include <time.h>int add(int a, int b){ retur原创 2021-11-17 16:54:30 · 1584 阅读 · 0 评论 -
map 自定义键值类型【c++】
众所周知,map底层是一棵RBTree,主要是通过key值比较来插入。同时,map在STL中也是一个模板类,key值可以是任意类型。但是key值是自定义类型,该如何比较。首先,看下map的定义:template < class Key, //map::key_tpe class T, //map::mapped_type原创 2021-11-13 20:43:34 · 2957 阅读 · 0 评论 -
快速排序的函数模板方法实现(c++)
快速排序是比较常用的排序方法,算法的时间复杂度最好为O(nlogn),最坏时能达到O(n²),是一种不稳定的排序方法。快排的基本思想1.选取一个基准2.将比它”小”的放在它前面,比他“大”的放在后面3.递归处理基准位置前后的两个子区间实现步骤函数传入的是指向第一个元素的位置和指向最后一个元素的位置,还可以传入一个比较函数(compare)1.选定一个基准值我们选择中间位置的元素的值作为排序的基准值,然后将第一个指针指向开始位置,将第二个指针指向结束位置2.比较基准值,将所有元素除去原创 2021-11-09 23:17:34 · 887 阅读 · 0 评论 -
[]c++】10个练手项目
1.写一个Json库链接:https://github.com/miloyip/json-tutorial/blob/master/tutorial01/tutorial01.md2.写一个红黑树链接:https://github.com/william-zk/RB_Tree写一个STL链接:https://github.com/Alinshans/MyTinySTL4.写一个NoSQL链接:https://www.lanqiao.cn/courses/1341写一个高..原创 2020-11-24 07:54:44 · 1112 阅读 · 0 评论 -
【C++】小技巧笔记
一、一个函数获得容器中最大/最小值方法:使用max_element(A, A+N),此外min_element(A, A+N)可以用来找最小的元素。以下只举了数组的例子,当然对vector、string这样的对象也是可以进行操作的,但这里不再演示。#include <stdio.h>#include <algorithm>using namespace std;int main(){ char ch[5] = {'a','b','c','e','f'};原创 2020-10-07 17:22:35 · 128 阅读 · 0 评论 -
计数排序笔记
计数排序提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录计数排序一、什么是计数排序?二、算法思想三、代码四、局限性一、什么是计数排序?计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是原创 2020-10-07 17:11:54 · 135 阅读 · 0 评论 -
【leetcode 每日一题】
【题目:】LCP 19. 秋叶收藏集小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片黄叶。出于美观整齐的考虑,小扣想要将收藏集中树叶的排列调整成「红、黄、红」三部分。每部分树叶数量可以不相等,但均需大于等于 1。每次调整操作,小扣可以将一片红叶替换成黄叶或者将一片黄叶替换成红叶。请问小扣最少需要多少次调整操作才能将秋叶收藏集调整完毕。示例 1:输入:lea原创 2020-10-01 12:26:07 · 140 阅读 · 0 评论 -
【c++】生产者与消费者问题
单个生产者和单个消费者#include <iostream>#include <mutex>#include <condition_variable>#include <Windows.h>using namespace std;const int ITEMREPOSITORY_MAXSIZE = 10;const int ITEMTOPRODUCE_COUNT = 100;//使用环形队列struct ItemRepository{原创 2020-08-30 15:22:47 · 661 阅读 · 0 评论 -
【WINDOWS核心编程】windows获取路径的方法
【一】GetCurrentDirectory获取当前进程的当前目录(避免使用)DWORD GetCurrentDirectory(DWORD nBufferLength,//sizeofdirectorybufferLPTSTR lpBuffer//directorybuffer);参数说明nBufferLength 缓冲区的长度lpBuffer 指定一个预定义字串,用于装载当前目录返回值调用成功 返回装载到lpBuffer的字节数。使用GetLastError函数可获得错...原创 2020-08-22 22:50:00 · 940 阅读 · 0 评论 -
【WINDOWS核心编程】获取系统变量值
GetEnvironmentVariable是一个从调用该函数的进程的环境变量中返回指定的变量名值的函数,主要参数有lpName、lpBuffer等。GetEnvironmentVariable函数从调用该函数的进程的环境变量中,返回指定的变量名的值,该值是一个以零结尾的字符串指针.DWORD GetEnvironmentVariable(LPCTSTR lpName, // address of environment variable nameLPTSTR lpBuffer, // ad原创 2020-08-22 09:52:42 · 369 阅读 · 0 评论 -
【leetcode每日一题】20. 有效的括号
【题目:】20. 有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输入: "([)]"输出: false示例5:输入: "{[]}"输出:...原创 2020-08-14 20:41:58 · 154 阅读 · 0 评论 -
【leetcode每日一题】面试题 16.11. 跳水板
【题目:】面试题 16.11. 跳水板你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。示例:输入:shorter = 1longer = 2k = 3输出: {3,4,5,6}提示:0 < shorter <= longer0 <= k <= 100000【感受:】题很简单,但思维方式的不同决原创 2020-07-08 21:06:23 · 216 阅读 · 0 评论 -
【leetcode每日一题】112. 路径总和
【题目:】112. 路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回...原创 2020-07-07 23:05:50 · 170 阅读 · 0 评论 -
【leetcode每日一题】44. 通配符匹配
【题目:】44. 通配符匹配给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字...原创 2020-07-05 17:51:37 · 584 阅读 · 0 评论 -
【leetcode每日一题】108. 将有序数组转换为二叉搜索树
【题目:】108. 将有序数组转换为二叉搜索树将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /-10 5【思路】:先想二叉搜索树的定义和特性:二叉查找树...原创 2020-07-03 23:25:34 · 159 阅读 · 0 评论 -
【c++】函数time和clock的计时区别
CLOCK函数:clock_t clock(void),返回从“开启这个程序进程”到“程序中调用clock函数”时之间的CPU时钟计时单元(clock tick数)。TIME函数:time_t time(time_t *timer),返回从纪元Epoch(UTC:1970-01-01 00:00:00)到当前时刻的秒数。区别:1.time函数计时是现实中正常的秒数,而clock函数计算的是耗用多少个CPU的时钟单元2.sleep()并不占用cpu资源,所以clock不会计算在内.原创 2020-07-02 23:14:43 · 1377 阅读 · 0 评论 -
[C++]stack使用总结
stack使用总结什么是栈?使用和常用函数使用需包含头文件模板参数栈初始化常用函数小技巧什么是栈?1.栈(stack)是一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);原创 2020-06-30 23:34:53 · 1616 阅读 · 0 评论 -
【leetcode每日一题】09. 用两个栈实现队列
【题目:】 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHe原创 2020-06-30 22:56:48 · 193 阅读 · 0 评论 -
【leetcode每日一题】215. 数组中的第K个最大元素
【题目:】215. 数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。【懒人做法:】利用c++已有函数进行升序排序,然后第n-k个元素就是所求值。#include&l.原创 2020-06-29 23:10:03 · 137 阅读 · 0 评论 -
【c++】常用函数详解
一、snprintfC 标准库函数,需要头文件#include <stdio.h>int snprintf(char *str, size_t size, const char *format, ...)设将可变参数(...)按照 format 格式化成字符串,并将字符串复制到 str 中,size 为要写入的字符的最大数目,超过 size 会被截断。参数:str:目标字符串。size:拷贝字节数(Bytes)。format:格式化成字符串。......原创 2020-06-11 23:16:21 · 371 阅读 · 0 评论