自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

转载 C++常用数学函数

1 三角函数double sin (double);double cos (double);double tan (double);2 反三角函数double asin (double); 结果介于[-PI/2, PI/2]double acos (double); 结果介于[0, PI]double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]double atan2 (double, double); 反正切(整圆值), 结果介于[-PI/2, PI

2020-11-12 20:16:14 2329

原创 C++ bitset用法一文通

本文整理学习自此链接处,原链接博文讲的很好了,建议看原文。我只是为了学习所以又总结了一遍C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。**需要添加头文件#include <bitset>;构造函数//通式 bitset<大小> 名称(初始值)//注意初始值的几种不同情况,以及与大小的关系bitset<4> bitset1;  //无参构造,长度为4,默认每一位为0cout

2020-11-12 17:25:13 269

原创 c++的位运算总结

最近在刷位运算的题目,经常用的位运算还比较熟悉,但对于左移、右移运算符和其应用实践有待学习。这里统一总结一下C++的位运算。学习整理自此链接处1.总表运算符名称作用&按位与两个操作数同时为1,结果为1|按位或两个操作数只要有一个为1,结果为1~按位非按位取反,操作数为1,结果为0;操作数为0,结果为1^按位异或两个操作数相同,结果为0;两个操作数不同,结果为1<<左移右侧空位补0,左移一位相当于将原数扩大两倍&

2020-11-12 16:23:40 1490

原创 C++之memset函数

本文转载整理自此链接memset()是char型初始化函数。头文件#include <string.h>//或者#include <memory.h>函数原型void *memset(void *s,int ch,size_t n);功能:讲s所指向的某一块内存中的前n个自己的全部内容设置为ch指定的ASCII值。第一个参数为指定内存的开始地址,第三个参数为指定内存的大小,第二个参数为初始化的内容以ASCII码表示。注:这个函数为新申请的内存做初始化工作,其返回

2020-11-11 12:08:09 432

原创 数据类型的转换

本文整理学习自,侵权请联系删除!1.int转string1.使用stringstream #include <sstream> #include <string> #include <iostream> using namespace std; int main() { int m; stringstream ss; cin>>m; string str; ss<<m; ss>>str;

2020-10-28 22:53:16 151

原创 一文读懂字符串find和find_first_of哪些事

find()C++字符串string中find()返回值是字母或者子字符串在原串中的位置(下标从0开始)。如果没有找到则返回一个特别的标记npos(返回值可以看成一个int型的数据)str2.find(str1,a,b)//从原字符串的a位置查询str1的前b个字符出现的位置这里命名str2为源串,str1为目标串。string s = "1a2b3c4d5e6f7jkg8h9i1a2b3c4d5e6f7g8ha9i";//find查找单个字符cout << s.find("a") &

2020-10-27 22:00:53 558

原创 利用lambda直接对map排序

文章讲解了将map移植到vector容器中,然后按照pair数对的第二个元素排序的方法,本文将讲解一种简洁的lambda方法,但此方法运行时间长。leetcode 451根据字符出现频率排序给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例:输入:“tree”输出:“eert”解释::'e’出现两次,'r’和’t’都只出现一次。因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。1.unorde_map+vector排序2.优先队列priority_q

2020-10-26 20:22:32 741

原创 字符相关的库函数

判断函数1.isalphaisalpha()用来判断一个字符是否为字母,如果是字母则返回非0,否则返回0cout<<isalpha('a');//返回非0cout<<isalpha('2');02.isalnumisalnum()用来判断一个字符是否为字母或数字,如果是字母或数字则返回非0,否则返回0cout<<isalnum('a');//1cout<<isalnum('2');//1cout<<isalnum('.');//

2020-10-25 17:45:07 185

原创 高效遍历二维数组

在leetcode566重塑矩阵一题中,学到了一种高效遍历二维数组的方法,代码看起来更加简介,易懂。之前见过,但自己撸代码时却没有想起来,看来是不总结学习效果还是差!具体题目:给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。示例 1:输入:nums =[[1,2],[3,4]]r = 1, c =

2020-10-20 22:34:19 1196

原创 几种二叉树的定义

相关术语节点:包含一个数据元素及若干指向子树分支的信息节点的度:一个结点拥有子树的数目称为结点的度叶子节点:也称为终端结点,没有子树的节点或者度为零的节点分支节点:也称为非终端结点,度不为零的节点称为非终端节点树的度:树中所有节点的度的最大值节点的层次(深度):从根节点开始,假设根节点为第1层,根节点的子节点为第2层,依此类推,如果某一个节点位于第L层,则其子节点位于第L+1层树的高度:树中所有节点的层次最大值称为树的高度;高度是从下往上,深度是从上向下数有序树:如果树中各棵子树的次序是有

2020-10-18 16:25:33 2391

原创 map转换为vector对map.second排序

在leetcode501中,有两个小知识点需要学习。1.数组方式插入元素map有几种插入方式,具体区别请参考链接。本题,采用了数组的方式插入元素,first为元素值,second为元素出现次数void searchBST(TreeNode* cur, unordered_map<int, int>& map) { // 前序遍历 if (cur == NULL) return ; map[cur->val]++; // 以数组方式插入,统计元素频率

2020-10-18 13:58:14 2413 1

原创 sort自定义排序规则的static函数

sort函数对系统类型默认升序排列,当我们想降序排列或者对自定义数据类型排序时需要手写排序函数cmp,具体语句为sort(a.begin(),a.end(),cmp)。在做leetcode501题目时,发现自定义sort排序函数报错:error: reference to non-static member function must be called;英文的大致意思是:sort调用函数必须是static类型的。所以这里牵扯出一个小知识点:sort中的比较函数compare要声明为静态成员函数或全局函

2020-10-18 13:45:54 933

原创 二叉树的递归和迭代遍历方法总结

本文归纳学习总结自Carl大佬的公众号代码随想录关于二叉树的几篇推文。如若侵权,请联系删除!其中一篇推文链接二叉树是一种重要的数据结构,在应用和面试中经常出现,这里对二叉树的几种遍历方法进行了总结。总的来说二叉树的遍历分为深度遍历,广度遍历,方法也有迭代法和递归法。递归法易于理解,但一定要掌握迭代法。深度遍历深度遍历主要包括前序遍历、中序遍历和后序遍历,前中后都是指的节点的访问次序。图引自代码随想录1.递归方法写递归主要是把握住以下三个步骤:1.确定递归函数的参数和返回值:确定那些参数需要

2020-10-11 11:25:54 606 1

原创 容器学习总结

容器主要分为:顺序容器包括vector、deque、list、forward_list、array、string;关联容器包括set、map两大类(multiset,multimap,unorder_map,unorder_set,unorder_multimap,unorder_multiset)。关联容器和顺序容器有着根本的不同:所有顺序容器都提供了快速顺序访问元素的能力;关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。关联容器不支

2020-10-09 22:05:44 321

原创 老大难的KMP

学习自,微信公众号,代码随想录,膜拜Carl大佬!文章地址1.何为KMP其实是三个人的名字缩写,分别为Knuth,Morris和Pratt。KMP主要应用在字符串匹配上,主要思想是**当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了那么如何记录这些信息呢???这是KMP的重点,也是next数组所包含的意义!所以在接下来的学习和应用中,要深刻理解next数组里的数字表示的是什么,为什么这么表示?2.前缀表next数组其实就是一个前缀表,是用来回溯的

2020-10-01 21:06:55 233

原创 reverse库函数的易错点

在使用reverse库函数时,有一个重要的易错点就是指定反转的区域,在leetcode541中,没使用库函数可以轻松过关,但改用库函数后发现一直有小问题。这是因为库函数revers(s.begin(),s.end()),的作用区域没有搞明白revers(s.begin(),s.end())是将s整体反转,但回想一下,end()是最后一个元素的下一位的迭代器,所以如果我们想将区间it后的5个子字符串反转时,需要将作用区域设置为it+6,即reverse(it,it+6)顺便把541题目答案贴一下1.使用

2020-09-30 12:38:20 558

原创 交换两数值的三种方法

在leetcode刷344.反转字符串时,看到carl大佬提出了另一种交换两数值的方法,又从网上收罗了一下,发现有个大佬总结的很好。转载文章链接地址(侵权请联系我删除)为了学习,自己又码了一遍。对于数值交换通常有以下三种方式1.中间过渡变量int temp=a;a=b;b=temp;这种方法是最常用和易于理解的,但是由于会使用过渡变量,所以额外占用O(1)的内存空间。2.相加寄存可以将sum=a+b的值暂时寄存到a变量上,由于a=sum-b,所以可以将a值放置到b上,又由于b=sum-a

2020-09-30 11:11:02 393

原创 关于new及delete的总结

参考1https://blog.csdn.net/stefanjoe/article/details/79815959参考2https://blog.csdn.net/hit_shaoqi/article/details/103348024?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.no

2020-09-28 16:11:34 120

原创 2.4.4constexpr-C++11新特性

2.4.4constexpr和常量表达式常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。const int max_files=20; //max_files是常量表达式const int limit=max_files+1;//limit是常量表达式int staff_size=27;//staff_size不是表达式const int sz=get_size();//sz不是常量表达式尽管sta

2020-09-27 12:59:13 101

原创 2.4.3理解const-顶层与底层

2.4.3顶层const指针本身是不是一个常量和指针所指向的对象是不是一个常量,这是两个相互独立的问题。我们用顶层表示指针本身是个常量,而用底层表示指针所指向的对象是一个常量。更一般的,顶层const可以表示任意的对象是常量,这一点对任何数据类型都适用,如算术类型、类、指针等。底层const则与指针和引用等符合类型的基本类型部分有关。int i=0;int *const p1=&i;//不能改变p1的值,这是一个顶层constconst int ci=42; //不能改变ci的值,这是一个

2020-09-27 10:41:59 156 1

原创 2.4.2指针和const

2.4.2指针和const类似于常量引用,指向常量的指针不能用于改变其所指对象的值。要想存放常量对象的地址,只能使用指向常量的指针。个人理解:如果不使用指向常量的指针,则代表可以通过指针解引用的方式改变指向对象的值,这与对象是常量矛盾,所以要使用指向常量的指针,限制通过指针的方式改变对象值。const double pi=3.14; //pi是个常量,它的值不能改变double *ptr=&pi; //错误:ptr是一个普通指针,则*ptr=4.24;是不是与pi是常量对象矛盾con

2020-09-27 09:57:14 64

原创 链表的虚拟头节点好处

leetcode203总结一下链表的两种形式在删除特定节点时的不同,及优劣。leetcode203代码转载自Carl原文有图解,讲的更清楚,建议直接阅读原文!链表的定义在刷题时链表是已经给出定义的,而面试时若让你写定义,则可能会手高眼低,各种小错误,这里自己码一下。struct Listnode{ int val; Listnode* next; Listnode(int x):val(x),next(NULL)//构造函数,初始化也可以写在结构体内 {};};**注:构造函数

2020-09-23 20:23:45 1374

原创 2.4.1const的引用

2.4.1const的引用把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为对常量的引用。与普通引用不同的是,对常量的引用不能被用作修改她所绑定的值。const int ci=1024;const int &r1=ci;//正确:引用及其对应的对象都是常量r1=42;//错误:r1是对常量引用,const限制修改r1的值;另一方面r1=42等价于ci=42,但ci由const限定,不可更改值int &r2=ci;//错误:试图让一个非常量引用指向一个常量对象。//

2020-09-23 16:17:26 139

原创 2.4const限定符

2.4const限定符将const与引用和指针结合后,它们之间会摩擦出什么样的火花呢?想必,对大多数初学者来说是痛苦的火花,很多人都在这里晕头转向了。????????????????下面将通过本栏的几篇文章,学习总结。初始化和const因为const对象一旦创建后其值就不能在改变,所以const对象必须初始化,一如既往,初始值可以是任意复杂的表达式,或是拷贝赋值。const int i=get_size();//通过函数初始化const int j=42;//通过字面值初始化int i=4

2020-09-23 15:11:18 73

原创 2.3.3如何读懂符合类型的声明

2.3.3理解复合类型的声明两种声明定义方法1.int* p1,p2;2.int *p1,p2;两种方法均合法,只是侧重点不同,第一种着重强调变量具有的复合类型;第二种侧重于强调本次声明定义了一种复合类型。自己选择并坚持一种写法即可,最好不要变来变去。一般说来,声明符中修饰符(&,*)的个数没有限制。当多个修饰符连写在一起时,按照其逻辑关系解释即可。下面将介绍一种特殊的指针和引用。指向指针的指针指针是内存中的对象,像其他对象一样也有自己的地址,因此允许把指针的地址在存放到另一个指针中。

2020-09-23 14:51:18 94

原创 2.3复合类型---指针

2.3.2指针指针是”指向“另外一种类型的复合类型。与引用类似,指针也实现了对其他对象的间接访问。但两者有很多不同:1.指针本身是一个对象,允许对指针复制和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象;2.指针无须在定义时赋初值和其他内置类型一样,在块作用域内定义的指针如果没有初始化,也将有一个不确定的值。指针的定义如在一条语句中定义了几个指针变量,每个变量前面都必须有符号*int *p1,*p2;//都是指向int型对象的指针double dp,*dp2;//dp是double型对象

2020-09-23 12:55:04 119

原创 2.3复合类型-引用

2.3复合类型变量复合类型是指基于其他类型定义的类型,本章主要介绍指针和引用,其中指针是重点和难点,要学会区分指针和引用的不同。语句模板:一条声明语句由一个基本数据类型和紧随其后的一个声明符列表组成。每个声明符命名了一个变量并指定该变量与基本数据类型有关的某种类型。2.3.1引用(reference)C++11中新增了”右值引用“,将在后面13.6.1节介绍;这里主要介绍,左值引用。引用为对象起了另外一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声

2020-09-23 12:14:42 209 1

原创 2.2变量

变量变量提供一个具名的、可供程序操作的存储空间。变量名是方便编程,给程序员看的和使用的。2.2.1变量定义首先是类型说明符,随后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。int sum=0,value,sold=0;Sales_item item; //item的类型是一种Sales_item的类类型。string book("0-201-78345-x"); //book通过字面值初始化初始化虽然初始化和赋值很像,但还是不同!初始化是在创建对象时赋予其一个

2020-09-23 10:52:53 127 1

原创 2.1基本内置类型

第2章变量和基本类型C++语言支持广泛的数据类型。它定义了几种基本内置类型(如字符、整型、浮点数等),同时也为程序员提供了自定义数据类型的机制。基于此,C++标准库定义了一些更加复杂的数据类型,比如可变长字符串和向量等(string)。本章主要讲内置类型。2.1基本内置类型类型决定了数据所占的比特数以及该如何解释这些比特内容。算术类型:整型、浮点型C++只规定了算术类型的最小尺寸,在不同系统环境中尺寸也不一样。但原则是一个int至少和一个short一样大,一个long至少和一个int一样大,一个

2020-09-23 09:15:47 187

原创 C++Primer第1章总结

第1章 开始1.1初识C++程序#include<iostream>//头文件int main()//返回值类型 函数名 (形参列表){//花括号内为函数体 return 0;//函数语句,每一语句后都要加;}注:每个程序都包含一个或者多个函数(function),其中只能且必须有一个命名为main。所有程序都是从main开始执行,当分析程序时,必须从main开始。Note:return的返回值类型和函数名中的返回值类型要一致,一般返回值为0表示程序成功运行。特别注意retu

2020-09-22 23:22:43 125

原创 leetcode202快乐数

letcode202快乐数总结1.取正整数n的各位数字刚开始练习算法,发现自己真的是太low了!不过,最后自己整出来了,还是成就感满满的!快乐数中对于新手来说,一个难点是对正整数n分拆出各个数位上的数字。1.low法这是我自己想出来的,对各位数字求平方和,简直是“狗屎”,运行效率贼差。不过,我还是爱他的,毕竟是自己手撸出来的,跪着也要吃!int calsum(int n) { int i=1; int m; vect

2020-09-22 19:55:02 180

原创 范围for循环

foreach遍历学习`for(int num : nums2)`for(int num : nums2)刚开始学习C++,在leetcode看到大神写的代码中有for(int num : nums2)一脸懵逼怀疑自己看了个假视频,学的C++是上个世纪的,从网上查找了下资料,特此整理学习!其实这就是简化的循环写法,善于观察的同学结合上下代码语句,应该猜个大概。等同于int num;for(int i=0;i<nums.length;i++){num=nums2[i];}文

2020-09-22 17:25:11 6087 18

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除