C++算法
文章平均质量分 77
具体所有的算法都已经公开到了我的gitee上面了, 如果有需要可以直接点看查看, 欢迎批评指正.
https://gitee.com/nwu_zjq/work/tree/master/01_algorithm
落子无悔!
念念不忘,必有回响.不积小流,无以成江海.
展开
-
gtest和gmock在C++中的使用过程
gtest的使用流程原创 2022-04-20 11:56:38 · 1631 阅读 · 0 评论 -
利用VScode来debug通过Makefile管理的C++项目
最近涉及到的全部都是C++整个项目, 一直都是通过print的方式进行debug或者通过写一些test_dome来利用VScode在一个cpp文件中进行debug, 直到今天由于代码写的太多了已经无法通过print或者编写测试用来来debug了, 因此硬着头皮尝试利用VScode和Makefile管理对C++整个项目进行debug, 终于皇天不负有心人有心人呀, 在经过各方努力(rz学妹), 终于实现了这个debug功能1. 相关vscode (插件包含 WSL用于连接win下的WSL, C/C+.原创 2021-12-04 20:49:04 · 1326 阅读 · 0 评论 -
C++ boost下载安装流程和使用
直接下载解压, 有安装流程原创 2021-10-09 11:48:16 · 2786 阅读 · 0 评论 -
C++ STL模板template的全部知识点和实例以及容器vector实现/迭代器的底层实现
C++ STL之模板 template 全解文章目录1. 函数模板1.1. 基本范例1.2. 实例化1.3. 参数模板的推断1.4. 参数模板的重载1.5. 特化2. 类模板2.1. 基本范例2.2. 类模板是在运行时确定运行的方法2.3. 类模板做函数的参数2.4. 类模板继承问题2.5. 类模板的类外实现成员函数2.6. 类模板的友元3 类模板的应用3.1 类模板vector的实现 ==重要*==知识点a. 显式构造关键字 `explicit`模板函数的使用模板类1. 函数模板1.1. 基本范原创 2021-10-05 19:38:41 · 2373 阅读 · 0 评论 -
C++ 不同缓存cache实现(超时清除, 最不经常使用LFU, LRU-双向链表)
文章目录1. 先验知识1.1 时间相关1.2 容器list 双向链表遍历删除2. 超时清除3. 最不经常使用LFU4. 经常使用LRU本文主要实现不同cache, 是因为之前笔试中有个类似的问题需要实现, 并且在牛客上也有类似的训练题, 因此本文做个总结;cache中使用map作为key-value的存储, 在查询的时候速度会最快十月一也没啥地去玩, 提高一下自己的业务能力吧1. 先验知识1.1 时间相关#include <chrono> // 时间戳等头文件#include原创 2021-10-02 14:33:25 · 4651 阅读 · 0 评论 -
C++ 必须掌握的10个现代C++11新特性
文章目录1. 10大新特性 只是语法糖的冰山一角1.1 类的委托构造函数1.2 struct可以直接定义并初始化了1.3 nullptr 防止类型转换 (C++建议默认使用nullptr做空代替null)1.4 enum class 枚举定义和使用1.5 auto 自动识别类型1.6 constexpr 常量表达式, 告诉编译器编译时计算1.7 map的定义和初始化, 以及遍历1.8 智能指针 shared_ptr, unique_ptr, weak_ptr1.9 lambda具体可看:现代 C++ 教程原创 2021-09-28 09:26:55 · 2360 阅读 · 0 评论 -
C++ 六大排序算法实现和比较
文章目录一. 快速排序1.1 介绍1.2 函数片段1.3 快排应用二. 归并排序2.1 介绍2.2 函数片段三. 插入排序3.1 介绍3.2 函数片段四. 冒泡排序4.1 介绍4.2 函数片段五. 选择排序5.1 介绍5.2 函数片段六. 桶排序常用的排序算法本文介绍多种排序算法, 利用图示进行解析最后部分是整个可执行带主函数的代码\color{#FF3030}{带主函数的代码}带主函数的代码一. 快速排序1.1 介绍快速排序是一种查找一个值的绝对位置, 根据此位置将序列分成左右两个位置原创 2021-08-20 14:59:01 · 2636 阅读 · 0 评论 -
C++ 路径问题汇总 涉及DP, DFS, BFS和回溯
最近这几天忙着参加各大互联网公司的笔试, 发现有一个规律, 算法题都喜欢出路径问题, 二维数组作为地图, 从(0,0)点到(m-1,n-1)点最短花费, 至少删除多少个障碍才能够到达等等, 总之就是二维数组找路径, 其中有不同的障碍物, 不同的分值, 总之八仙过海各显神通, 可能是因为涉及到很多的知识, 因此大家都乐意出这样的题吧;今天小弟在这里献上收集来的各种题型和解题思路1. 广度优先搜索和优先队列配合不同道路不同消费并且含有障碍物, 问从(0,0)到(m-1, n-1)的最低消费, 注意:原创 2021-08-22 16:51:42 · 2964 阅读 · 0 评论 -
C++ 硬核知识点: 数据段/代码段/内存分配/虚函数/继承/多态
1. 结构体struct和类class占用内存大小解析今天面试遇到一个比较有意思的问题, 这里安排一下空结构体和空类占内存大小是多少?答案:1. C++指定空结构体和空类所占内存大小为1,2. C 的空类和空结构体大小为0为何c++会有这样的规定呢?no object shall have the same address in memory as any other variable如果允许C++对象大小为0, 那么这里的运算将产生两个问题:不能通过指针区分不同的数组对象,siz原创 2021-08-15 13:04:39 · 3370 阅读 · 2 评论 -
C++ 吃透动态规划算法
文章目录1. 介绍2. 子序列问题1143.最长公共子序列300.最长递增子序列2.1 最长递增子序列应用354.俄罗斯套娃[17.08 马戏团人塔](https://leetcode-cn.com/problems/circus-tower-lcci/)3. 路径问题[64. 最短路径和](https://leetcode-cn.com/problems/minimum-path-sum/)[221. 最大正方形](https://leetcode-cn.com/problems/maximal-squa原创 2021-08-14 21:49:22 · 5309 阅读 · 10 评论 -
C++ 吃透回溯算法
感谢博主代码随想录的视频分享下文总结皆根据上述视频总结记录1. 回溯算法的核心1.1. 介绍回溯算法都可以抽象成一个N叉树, 每个节点都是处理集合的大小, 树的深度是递归 回溯法是优先搜索的一种特殊情况, 常用需要记录节点状态的深度优先搜索策略, 通常比如排列, 组合, 选择类问题使用回溯法; 在搜搜某一个节点时候, 如果发现目前节点并不是目标节点, 我们回退到原来节点继续搜索, 并且把目前节点修改的状态还原.原创 2021-08-05 17:34:47 · 7458 阅读 · 15 评论 -
C++ 双指针汇总(快慢指针, 滑动窗口, 前后指针,左右指针)
一. 归并有序序列input: nums1 = {2,2,3,0,0,0}; m=3; nums2 = {1,5,6}; n=3output: nums1 = {1,2,2,3,5,6}require: 时间O(n) 内存O(1)1.1 总结:1.2 代码#include <iostream>#include <stdio.h>#include <vector>#include <map>using namespace std;原创 2021-01-21 17:40:07 · 3562 阅读 · 0 评论 -
C++ 大根堆源码实现/优先队列(堆)/小根堆解决多链表排序
1. 介绍本文主要围绕解决下面215题展开的LeetCode 215题数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入: [3,2,1,5,6,4] 和 k = 2输出: 5解题思路:一种是快排解题思路, 找到对应的倒数第K个值即可另一种利用堆先排序, 然后在pop, 大根堆pop到k-1个值, 第k个即为所求本文主要是实现堆, 虽然可以用优先队列进行实现, 但是面试官当然不是希原创 2021-06-11 21:39:58 · 3640 阅读 · 1 评论 -
C++ 基础知识:iostream/fstream/sstream以及std容器算法
文章目录1. C++的输入输出 `#include `1.1 输入输出的定义1.2 输入输出重定向a 输出重定向b 输入重定向c 流操作算子1.3 getline()读取一行的问题1.4 输入字符串解析各种数据a 字符串分割方法b. 字符串转int类型c. 方法2,3的实现 字符串直接提取数组d. 方法1 字符串提取二维数组2. 基础容器 vector和list2.1 vector和list底层逻辑以及区别2.2 vector基础语法 `#include `a. vector增删改查b. 二维vector的原创 2021-08-30 11:23:44 · 3247 阅读 · 0 评论 -
C++三大特性 继承/多态/封装
本文根据动物类作为父类/基类, 猫狗类作为子类/派生类, 介绍整个面向对象过程中的重要知识点文章目录一. 继承1.1 创建第一个父类 (动物类)1.2 创建子类继承上面的父类 (猫狗继承动物类)二. 多态2.1 动物歌唱大赛三. 封装一. 继承面向对象编程的最大功能, 继承是事务具有祖先特性, 事务也有自己的特性, 具体将: 继承机制允许派生类继承基类的属性和方法, 同时可以增加新的属性和方法1.1 创建第一个父类 (动物类)知识点包含: 构造函数 析构函数 重写 protected,pu原创 2021-03-18 16:36:20 · 2198 阅读 · 2 评论 -
LeetCode_哈希算法应用 -快捷查找
声明:以下所有题都借鉴所有大佬们整合而成,我只是做了一下笔记,若有违法侵权,还望及时告知进行删除处理。文章目录题目1 两数之和题解1 暴力题解(面试的时候千万不要回答这个)题解2 类哈希表, temp.index索引题解3 哈希表题目2 三数之和去重详解思考:为何使用哈希表去重,而不是直接如下所示:**题解1 暴力题解题解2 指针图解值得学习之处:题解3 哈希表值得学习之处总结:题目1 两数...原创 2020-01-31 12:46:20 · 403 阅读 · 0 评论 -
4_指针和引用分析
本例分析了指针/引用/函数指针/指针函数/#include <iostream>#include <vector>#include <algorithm>#include <stdio.h>using namespace std;// 指针和引用void test1(int*a, int b, int &c){ cout<<"函数参数输入是: *a="<<*a<<" b="<<b<原创 2021-01-15 22:14:47 · 1895 阅读 · 1 评论 -
3_两数之和: 双指针/字典
问题介绍167.Two Sum II - Input array is sorted描述: 在一个增序的整数数组里找到两个数,使它们的和为给定值。已知有且只有一对解。Input: numbers = [2,7,11,15], target = 9Output: [1,2]总结: 这题太重要了, 包含两种重要算法的思想,a. 利用双指针对有序数列前后相加与目标值比较, 通过向中间移动两个指针最终得到目标值, 死亡条件是两个指针重叠, 表示没有找到目标b. 利用字典从头遍历,key=num原创 2021-01-15 21:42:25 · 2096 阅读 · 0 评论 -
0_win10子系统Ubuntu18创建 C/C++编译编辑环境
说明win10子系统Ubuntu18.04上面的gcc/g++编译器gcc -v --> gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)没有的可以sudo apt install gccwin10上的VScode编辑器总体概况:利用VScode插件WSL远程链接, 链接到本地子系统Ubuntu, 利用Ubuntu里面的gdb进行调试VScode插件Remote - WSLC/C++Ubuntu软件gccgdb原创 2020-12-30 09:30:05 · 2336 阅读 · 0 评论 -
c/c++通信python socket TCP连接
问题:C++项目调用python做的模型, 最开始的想法是system调用命令行bash进行python的调用,但是C++是一个循环, 每次调用python都会重新load一遍python模型, 这样会浪费很多时间we are using a variety of methods and approaches to settle the qustion.通过C++调用python的API接口, 在程序启动时一次load python模型,后面直接调用模型得到相关输出即可通过将python模型转化原创 2020-09-10 17:37:39 · 5665 阅读 · 1 评论 -
c/c++调用python
环境: Ubuntu18.04实验Python: 系统自带的python和conda创建的python环境gymlab(python3.6)gcc版本 5.0目标: 通过gcc编译c++(包含python)一. C++结合系统自带pythonc++代码// 运行命令// g++ -I /usr/include/python3.6 main.cpp // -L /usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/ -l python3.6#in.原创 2020-09-09 11:22:39 · 2575 阅读 · 0 评论 -
Qt命令行运行helloworld
1 代码#include <QtWidgets/QLabel> #注意这里一定要加QtWidgets,不然编译不通过#include <QtWidgets/QApplication>int main(int argc, char *argv[]){ QApplication app(argc, argv); QLabel *label = new ...原创 2019-10-06 12:17:17 · 593 阅读 · 0 评论 -
C++与C语言的核心区别
C++学习总结:C++比起C语言,多出来一部分函数,区别是C++ 面向对象的语言,增加了类操作系统 win10编程软件 Qt0 如何让控制台显示中文字符在main()函数开头添加system("chcp65001");1 类的定义和使用这里分为三个文件 main.cpp(主函数文件) man.cpp(类的方法实现文件)man.h(类的变量和方法实现文件)//注意.h文件...原创 2019-08-02 22:46:16 · 203 阅读 · 0 评论