- 博客(52)
- 收藏
- 关注
原创 C++标准库(STL)与泛型编程
C++标准库(STL)与泛型编程学习网站:cplusplus.comcppRerference.com学习书籍:《STL源码剖析》STL体系结构基础介绍STL六大部件:容器、分配器、算法、迭代器、适配器、仿函数迭代器:泛化的指针分配器:分配内存仿函数:作用类似函数,加减适配器(变压器):count_if:给出条件之下符合条件的个数;bind2nd:绑定第二参数;not1 :否定,大于等于40;end指向最后一个元素的下一个元素c++11的新特性:range-based
2021-03-31 21:34:56 632 2
原创 面向对象编程下---兼谈对象模型
面向对象编程下—兼谈对象模型转换函数Fraction转换为double,没有return type:将fraction转换为double43=3/1;所以第二个参数可以默认为1;one-argument 一个参数就可以了;上面代码考虑将4转换为Fraction。当有两条路可行之时,会发生歧义二义性;explicit明白的,明确的,不可以将3变为3/1,用在构造函数前面,标准库中转换函数的利用代理,a代表B,一定有一个函数将a转换为b;pointer-like clasa
2021-03-30 20:55:03 178
原创 面向对象设计
面向对象的编程类之间的关系有复合(composition)、委托(aggregation)和继承(extension) 3种.继承我里头里面有某种东西;queue里面的功能有deque来实现;A拥有B;A的所有功能都有B来实现;Adapter(适配器);queue,用别的来实现内存角度构造和析构函数顺序委托(Delegation)指针指向右边的类;by reference (指针也叫)has a :有外部就有内部,一起的委托:不同步。左边指针可以指向不同的类,实现不同的功
2021-03-30 00:37:41 232
原创 Leetcode 每日一题打卡系列
Leetcode 每日一题打卡系列03.14 设计哈希映射(706)class MyHashMap {public: /** Initialize your data structure here. */ vector<list<pair<int,int>>>data; const static int base=769; static int hash(int key){ return key%base; }
2021-03-18 13:44:20 302
原创 二叉树的遍历递归与迭代实现
二叉树的遍历二叉树主要有两种遍历方式:深度优先遍历:先往深走,遇到叶子节点再往回走。广度优先遍历:一层一层的去遍历。那么从深度优先遍历和广度优先遍历进一步拓展,才有如下遍历方式:深度优先遍历前序遍历(递归法,迭代法)中序遍历(递归法,迭代法)后序遍历(递归法,迭代法)广度优先遍历层次遍历(迭代法)经常会使用递归的方式来实现深度优先遍历,也就是实现前中后序遍历;迭代:前中后序遍历的逻辑其实都是可以借助栈使用非递归的方式来实现的。广度优先遍历的实现一般使用队列来实现,这也是队列先进先出
2020-12-15 22:28:32 315
转载 常见七大排序算法c++代码实现
一级标题二级标题三级标题四级标题五级标题六级标题排序的分类稳定排序:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;其中稳定得排序有冒泡排序、插入排序、归并排序、计数排序、桶排序、基数排序。不稳定排序:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;不稳定的排序有选择排序、希尔排序、快速排序和堆排序。内排序 :所有排序操作都在内存中完成;外排序 :由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;各算法的对比如下表所示:n:
2020-12-13 23:33:21 1786
原创 树的理论知识
树的基础知识1.1 定义1.2 节点的度1.3 树的深度2.1 二叉树的定义2.2 二叉树的特点2.3 二叉树的性质2.4 特殊的二叉树2.4.1 满二叉树2.4.2 完全二叉树2.5.线索二叉树2.6.二叉搜索(排序)树2.5.1定义2.5.2 查找2.5.3 删除2.5.4 插入2.7 平衡二叉树(AVL树)2.7.1定义2.7.2特点2.8 红黑树2.9 多路查找树(B树)1.1 定义树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:1)有且仅有一个特
2020-12-13 17:54:54 454
原创 win11 系统 GPU版本pytorch、CUDA、anaconda 、pycharm详细安装教程
win11 系统深度学习环境搭建----- GPU版本pytorch、CUDA、cuDnn、anaconda 、tensorflow_gpu、pycharm详细安装教程参考比站视频:PyTorch(GPU版)详细安装教程_哔哩哔哩_bilibiliPython+Anaconda+PyCharm的安装和基本使用【适合完全零基础】不只是教你如何安装,还告诉你为什么这么安装_哔哩哔哩_bilibiliAnaconda和Pycharm的安装和配置 - 做你的太阳乀 - 博客园 (cnblogs.com)1
2021-11-18 14:38:27 13839 11
原创 自定义排序、结构体/优先队列 重载小于或大于号
数组一般的sort排序#include<iostream>#include<algorithm>using namespace std;int a[10]={5,1,8,4,2,5,7,4,9,10};int main(){ int i; sort(a,a+10); for(int i=0;i<10;i++){ cout<<a[i]<<" "; } return 0;}//输出:
2021-09-15 19:44:24 2665
原创 2021-08-12
40.1 函数、类模版模版可分两类:函数模版,类模版。函数模板可被重载,而类模板不能被重载,也就是说允许存在两个同名的函数模板,还可以对它们进行实例化,使它们具有相同的参数类型。函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。40.2 模板特化对单一模板提供的一个特殊实例,使每种类型都具有相同的功能,将一个或多个模板参数绑定到特定的类型或值上。特化分为了两种,全特化和偏特化。不能将特化和重载混为一谈,全特化和偏特化都没有引入一个全新的模板或者模
2021-08-12 17:23:19 415
原创 软件开发基础知识
34. 内存资源及管理内存被分成五个区:栈、堆、静态存储区、常量区、代码区。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6oQfAxQ-1628760080125)(file:///D:/写文章-CSDN博客_files/89263655e6e048caa4615ec16accb0eb.png)]栈:存放函数的参数和局部变量,编译器自动分配和释放。栈属于计算机系统的数据结构,进栈出栈有相应的计算机指令支持,而且分配专门的寄存器存储栈的地址,效率高,内存空间是
2021-08-12 17:22:51 773
原创 软件开发基础知识
19. std::move语义并不移动任何东西,唯一功能是将一个左值强制转化为右值引用,继而可通过右值引用使用该值,以用于移动语义。本质是一个无条件static_cast,形参为左值类型,返回右值引用。1) 函数原型定义template <typename T>typename remove_reference<T>::type&& move(T&& t) { return static_cast<typenam
2021-08-12 17:21:07 952
原创 软件开发基础知识(1)
3.虚函数和纯虚函数3.1动态编译VTABLE实际是一个函数指针的数组,每个虚函数占用这个数组的一个slot。一个类只有一个VTABLE,不管它有多少个实例。派生类有自己的VTABLE,但派生类的VTABLE与基类的有相同的函数排列顺序,同名的虚函数被放在两个数组的相同位置。在创建类实例的时候,编译器还会在每个实例的内存布局中增加一个vptr字段,该字段指向本类的VTABLE。通过这些手段,编译器在看到一个虚函数调用的时候,就会将这个调用改写。类的实例对象不包含虚函数表,只有虚指针;一个类的虚函数在
2021-08-12 17:18:16 870
原创 c++软件开发基础知识
3.虚函数和纯虚函数3.1动态编译VTABLE实际是一个函数指针的数组,每个虚函数占用这个数组的一个slot。一个类只有一个VTABLE,不管它有多少个实例。派生类有自己的VTABLE,但派生类的VTABLE与基类的有相同的函数排列顺序,同名的虚函数被放在两个数组的相同位置。在创建类实例的时候,编译器还会在每个实例的内存布局中增加一个vptr字段,该字段指向本类的VTABLE。通过这些手段,编译器在看到一个虚函数调用的时候,就会将这个调用改写。类的实例对象不包含虚函数表,只有虚指针;一个类的虚函数在
2021-08-12 11:39:26 560
原创 数据库的学习
数据库的学习1.单表查询学生表student的结构:查询表中所有学号小于8的男学生的学号和姓名select sid,sname # 需要查询出来的字段from student # 从哪张表中取数where ssex = '男’ and sid < 8 #设置查询条件,两个条件用and(和)/or(或)连接如果你需要对选择出来的结果进行处理,需要使用函数和order by,再看一个例子:查询学号非空,姓“张”的学生的学号和姓名,按照sid升序并取前三条select s
2021-08-10 16:38:47 1340
原创 Git的简单使用教程
Git的使用1. 拉取远端分支打开Git Bash,切换到需要存放代码的文件目录下。例如,执行cd e:/workCode,切换到e盘workCode目录下。执行git lfs clone 项目的ssh地址拉取远程仓库代码到本地。其中,项目的ssh地址可在CodeClub中项目对应页面获取。例如:git clone ssh://git@szv-y.codehub.huawei.com:2222/HERT/V5R12C10/CRSP.git注意:如果出现拉取二进制文件速率为0的情况,可以尝试更新自
2021-07-29 14:47:44 741
原创 用栈模拟数学表达式计算
用栈模拟数学表达式计算这类题包括数字的加减乘除运算,有基本计算器、逆波兰表达式等;150 逆波兰表达式逆波兰表达式解题思路这题的解题思路就是,用一个栈去存储每一个字符串,遇到数字直接入栈,遇到运算符就先做运算。class Solution {public: int to_digit(string s){ int n=s.size(); int sum=0; for(int i=0;i<n;i++){ i
2021-04-01 16:45:46 407
原创 大整数的加减乘法运算
大整数的加减乘法运算415 字符串相加(10进制或36位加法)-字节高频给定两个字符串string num1和string num2,求两个的加法,其实即为大整数加法//10进制加法 string addStrings(string num1, string num2) { int i = num1.size()-1; int j = num2.size()-1; int carry = 0; string res; w
2021-03-29 12:48:05 169
原创 terminate called after throwing an instance of ‘std::invalid_argument‘ what(): stoi
当stoi函数用于空字符串时,会报这个错误如下面这行代码:string ans="";int res=stoi(ans);这时要判断要转换的字符串是否为空:
2021-03-23 23:51:22 2510
原创 单调栈分析
单调栈解决问题:解决最近邻较小或较大的问题;滑动窗口最大或最小值用途: 可以以 O(1)的时间复杂度得知某个位置左右两侧比他大(或小)的数的位置,当你需要高效率获取某个位置左右两侧比他大(或小)的数的位置的的时候就可以用到单调栈。求解数组中元素右边第一个比它小的元素的下标,从前往后,构造单调递增栈;求解数组中元素右边第一个比它大的元素的下标,从前往后,构造单调递减栈;求解数组中元素左边第一个比它小的元素的下标,从后往前,构造单调递减栈;求解数组中元素左边第一个比它小的元素的下标,从后往前,
2021-03-16 18:55:53 290
原创 数据结构之并查集
并查集更加详细的介绍参见:并查集介绍基础知识Quick-Find算法#include<stdio.h>#include<stdlib.h>typedef struct UnionSet{ int *color; int n;}UnionSet;UnionSet *init(int n){ UnionSet *u=(UnionSet *)malloc(sizeof(UnionSet)); u->color=(int *)mall
2021-01-12 19:32:41 134
原创 2021/01/12打卡
560 和为K的子数组解题思路:最先向想到的是三重暴力循环:如下代码所示:时间复杂度为O(n^3);超时int subarraySum(vector<int>& nums, int k) { int cnt=0; for(int i = 0; i<nums.size();i++){ for(int j=i;j<nums.size();j++){ int sum = 0;
2021-01-12 17:05:55 140
原创 数据结构之队列(循环队列)
循环队列的代码演示由于队列的出队操作是head++,直接向后移动,当队尾达到队列设定的长度时,会出现假溢出的现象(即可能head前面还可以插入),因此可以改为循环队列,而循环队列可能出现真溢出的现象,因此需要扩容操作。#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct Queue{ int *data; //队首,和队尾,队列的长度 int head,tai
2021-01-09 13:56:45 268
原创 数据结构之链表
#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct ListNode{ int data; struct ListNode *next;}ListNode;typedef struct List{ ListNode head; //变量,不是指针,方便链表节点的插入和删除,虚拟头节点(没有数据域) int length; //当前链表的长度信息}
2021-01-09 13:29:28 110 1
原创 数据结构之线性表
#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct Vector{ int *data; int length,size;}Vec;Vec *init(int n){ Vec *v=(Vec *)malloc(sizeof(Vec)); v->data=(int *)malloc(sizeof(int)*n); v->lengt
2021-01-08 23:22:12 121
原创 数据结构之堆(优先队列)
堆和优先队列堆—尾部插入调整,从最后一层插入,自下向上调整,堆–头部弹出调整,删除堆顶的元素,将堆尾的元素放到堆顶,维护完全二叉树,然后调整顺序堆----优先队列堆排序将堆顶元素与堆尾元素交换将此操作看作是堆顶元素的弹出操作按照头部弹出以后的策略调整堆#include<stdio.h>#include<time.h>#include<stdlib.h>#define swap(a,b){\ __typeof(a) __temp=a;\
2021-01-08 19:39:59 174
原创 动态规划问题
对于动态规划问题,如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组70 爬楼梯class Solution {public: int climbStairs(int n) { if(n<=1) return n; vector<int>dp(n+1); dp[1]=1; dp[2]=2
2021-01-06 21:29:14 222
原创 2020/12/30leetcode刷题
25 K个一组反转链表解题思路:大致过程可以分解为1、找到待翻转的k个节点(注意:若剩余数量小于 k 的话,则不需要反转,因此直接返回待翻转部分的头结点即可)。2、对其进行翻转。并返回翻转后的头结点(注意:翻转为左闭又开区间,所以本轮操作的尾结点其实就是下一轮操作的头结点)。3、对下一轮 k 个节点也进行翻转操作。4、将上一轮翻转后的尾结点指向下一轮翻转后的头节点,即将每一轮翻转的k的节点连接起来。/** * Definition for singly-linked list. *
2020-12-31 11:45:04 92
原创 2020/12/29刷题
209长度最小的子数组解题思路:解答1:暴力解法:两层暴力循环解决问题时间复杂度:O(N2)class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int ret=INT_MAX; for(int i=0;i<nums.size();i++){ int sum=0; for(int j=i;j&
2020-12-30 10:01:28 140
原创 2020/12/27 leetcode打卡
6.Z字型变换leetcode 6 中等解题思路:遍历一遍字符串,从左到右按箭头方向迭代 s ,将每个字符添加到合适的行。之后从上到下遍历行即可。当前行 curRow 为 0 或 n-1 时,箭头发生反向转折。class Solution {public: string convert(string s, int numRows) { if(numRows<2) return s; bool flag=false; int le
2020-12-27 21:09:46 108
原创 C/C++语言基础知识
C/C++语言基础知识C/C++语言malloc和calloc、realloc、new的区别strcpy和memcpy的区别智能指针shared_ptrweak_ptrunique_ptrauto_ptrauto_ptr 与 unique_ptr 比较强制类型转换运算符static_castdynamic_castconst_castreinterpret_castbad_cast运行时类型信息 (RTTI)dynamic_casttypeidtype_info指针与引用的区别堆和栈的区别内存内存分配和管理
2020-12-24 19:41:40 248 1
原创 2020/12/19leetcode打卡
11.盛水最多的容器leetcode11 中等解题思路利用双指针,左指针指向0,右指针指向最右边的,哪边小移动哪边的指针,,相等时两边都可以,取最大值即可。class Solution {public: int maxArea(vector<int>& height) { int l=0, r=height.size()-1; int ans=0; while(l<r){ int are
2020-12-21 14:15:34 141 1
原创 2020/12/18打卡
leetcode刷题31.下一个排列31 中等解题思路定义pos=num.size()-1;对于1857643;从末尾开始遍历寻找破坏升序的数nums[pos-1],在这个里面就是数字5,然后把begin+pos到end的数字翻转即为1853467,从pos到end寻找第一个比num[pos-1]大的数字,然后交换两者,即为后一个排列,这里交换5和6,即为1863457;。而对于123,num[pos-1]=2,交换2和3 即为132;class Solution {public:
2020-12-21 14:15:11 111
原创 ERROR 1698 (28000): Access denied for user ‘root‘@‘localhost‘解决办法
ERROR 1698 (28000): Access denied for user ‘root’@‘localhost’在linux系统中安装mysql8.0时初次登录出现上述问题;Step1:修改mysqld.cnf配置文件在ubuntu的terminal(也即终端)上输入sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf,进入到这个配置文件,然后在这个配置文件中的[mysqld]这一块中加入skip-grant-tables这句话。step2:设置root密
2020-12-17 21:14:01 1472
原创 2020/12/17leetcode刷题
2020/12/0721.合并两个有序链表leetcode21解题思路:解法1,递归时间复杂度为O(M+N);空间复杂度为O(m+n);class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == nullptr) { return l2; } else if (l2 == nullptr) {
2020-12-17 18:28:31 134
转载 数据库系统原理
数据库系统原理数据库系统原理一、事务概念ACIDAUTOCOMMIT二、并发一致性问题丢失修改读脏数据不可重复读幻影读三、封锁封锁粒度封锁类型封锁协议MySQL 隐式与显示锁定四、隔离级别未提交读(READ UNCOMMITTED)提交读(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIALIZABLE)五、多版本并发控制基本思想版本号Undo 日志ReadView快照读与当前读
2020-12-16 21:51:15 192
转载 数据库MySQL学习
MySQL一、索引B+ Tree 原理1. 数据结构2. 操作3. 与红黑树的比较MySQL 索引1. B+Tree 索引2. 哈希索引3. 全文索引4. 空间数据索引索引优化1. 独立的列2. 多列索引3. 索引列的顺序4. 前缀索引5. 覆盖索引索引的优点索引的使用条件二、查询性能优化使用 Explain 进行分析优化数据访问重构查询方式三、存储引擎InnoDBMyISAM比较四、数据类型整型浮点数字符串时间和日期1. DATETIME2. TIMESTAMP五、切分水平切分垂直切分Sharding 策
2020-12-16 21:26:00 180 1
原创 2020/12/16 leetcode刷题
Leetcode 打卡738.单调递增的数字20 有效的括号738.单调递增的数字解题思路:利用贪心算法:此题从后向前遍历;一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),先让strNum[i - 1]–,然后strNum[i]给为9;代码实现class Solution {public: int monotoneIncreasingDigits(int N) { //to_string 将数字转换为字符串 string
2020-12-16 18:38:48 180 1
原创 2020/12/12-----剑指offer刷题
剑指offer左旋转字符串题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路:解法1:使用标准库string::substr(size_type __pos, size_type __n);string::substr(pos, n)表示截
2020-12-13 17:55:34 118
原创 2020/12/11---刷题打卡之树
剑指offer二叉树的深度题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路第一解法是利用递归调用,另一种解法是利用树的层次遍历/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }
2020-12-12 14:59:50 1551
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人