C++
文章平均质量分 54
lucky tiger
要一直前进,一直静下心来学习。
展开
-
类实例化记录
【代码】类实例化记录。原创 2023-02-05 22:39:00 · 219 阅读 · 1 评论 -
力扣刷题457环形数组知识点之C++11lambda
今天在做力扣457环形数组的时候发现别人这样写autonext=[&](intcur){return((cur+nums[cur])%n+n)%n;//保证返回值在[0,n)中};[&]C++11新特性一直没好好总结:lambda的理解是:如果一个函数只在某一小块地方被调用,其它地方不用的话,用lambda表达式会增加可读性以及减少代码量吧。lambda的形式是:[captures]...原创 2021-08-08 15:38:06 · 264 阅读 · 0 评论 -
手撕红黑树一变化规则
1、二叉搜索树查找时间复杂度O(logn)如果二叉查找树是平衡的也就是AVL平衡二叉搜索树n个节点的话高度就是Olog2(n+1),查找效率就是Olog2n近似于折半查找,如果二叉搜索树完全不平衡退化为查找效率On,所以对于二叉查找树其时间复杂度为ON-OLOG2N之间。红黑树是一种特化的AVL树,必须满足二叉搜索树,根节点叶子节点必须为黑色,红黑树的平衡是一种相对平衡也就是维持黑色结点的平衡。2、AVL插入删除比较麻烦?红黑树怎么解决的呢?左旋右旋:https://blog.csdn.原创 2021-07-08 11:50:42 · 192 阅读 · 0 评论 -
平衡二叉查找树——红黑树
平衡二叉查找树——红黑树二叉查找树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值(键值不重复)。平衡二叉树(AVL树):在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。...原创 2021-07-07 11:28:38 · 227 阅读 · 0 评论 -
力扣7. 整数反转(指针引用形参、指针常量与长指针区别)
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321class Solution {public: int reverse(int x) { int ans = 0; wh..原创 2021-05-06 16:09:21 · 139 阅读 · 0 评论 -
数组地址与指针(二维数组*test.begin()->begin())
对于数组来说数组名字本身就是一个指针,它是一个指针常量,指向的地址不变。比如你定义了一个数组变量,编译器就会在内存中划分了一块地址空间给它,数组名这个指针常量就指向了这块内存空间的首地址,而数组首元素就存在这段内存空间的首地址处,即这段内存空间的首地址跟数组首元素的内存地址是一样的。#include<stdio.h>#include<iostream>#include<algorithm>#include <vector>using na原创 2021-03-30 11:09:25 · 405 阅读 · 0 评论 -
构造函数与初始化列表2
https://blog.csdn.net/qq_33757398/article/details/813319180.初始化与赋值的区别意义上:1)初始化:一个变量或者一个对象在产生的时候就赋予一个值,属于伴随性质2)赋值:在一个变量或者一个对象在产生之后的任意时刻赋予一个值,属于任意性质宏观代码上:1)两者作用相同2)对于数组和结构体来说,初始化和赋值的的形式不同。对于数组,可以使用花括号一起初始化,如果赋值的话,就只能单个元素就行;对于结构体,可以使用花括号初始..转载 2021-03-17 14:22:12 · 185 阅读 · 0 评论 -
C++类里面的构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:class CExample {public: int a; float b; //构造函数初始化列表 CExample(): a(0),b(8.8) {} //构造函数内部赋值 CExample() { a=0; b=8.8; }};上面的例子中两个构造函数的结果是一样的。原创 2021-03-17 14:00:34 · 230 阅读 · 0 评论 -
不同位数下的指针大小的一些思考
1、一个之前觉得好玩的东西,现在回过来看更好玩,记住:这里面有一个寻址位数的东西决定了指针的大小。32位系统,CPU有32根地址总线,逻辑寻址位数是32,指针大小就是4B,4个字节。(补充一下:之前也研究过这个东西32位系统只能最大带的动4G的运行内存,超过了就没办法寻址了,这个是最明显的)(win下与操作系统是这样很正常很简单的来寻址的,但是intel X86用的是内存映射,你的32位操作系统给的4G虚拟内存还要去映射BIOS ROM RAM实际与4G内存条映射的是不到4G的,有点像手机操作系原创 2021-01-16 22:41:14 · 567 阅读 · 0 评论 -
stringstream流输入输出(C++引入的概念)
1、之前刷leetcode发现这个函数对于对单词的计数很好用,总是忘记怎么用,自己总结记录一下。2、头文件 #include <sstream>3、<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作,也就是in out 。5、流输出举例#include <iostream>#include <sstream>using name.原创 2021-01-16 21:54:58 · 2089 阅读 · 0 评论 -
win下使用gvim编译C/C++
1、我资源里有安装包下载gvim一路默认安装2、修改编辑器样式set nocompatiblesource $VIMRUNTIME/vimrc_example.vim"source $VIMRUNTIME/mswin.vim"behave mswin set diffexpr=MyDiff()function MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-原创 2020-11-27 14:29:25 · 1152 阅读 · 0 评论 -
C++11 Lambda函数(匿名函数)
1、力扣1356使用了匿名函数,总结一下2、 Lambda表达式具体形式如下:[capture](parameters)->return-type{body} // 输入捕获 参数(1)一看到中括号开头的就是匿名函数#include <iostream>using namespace std;int main(){ [] { cout << "ssss" << endl; }; }这是...原创 2020-11-09 10:22:54 · 389 阅读 · 0 评论 -
union与大小端
union是C语言中的一个关键字,数据在内存中的操作是使用补码进行加减操作。int类型占4个字节长度,即32位,char类型占1个字节长度,即8位。80X86一般意味着小端存储和32位操作系统union中的所有数据成员共用一个空间,同一时间只能存储其中的一个数据成员,并且所有的数据成员有相同的起始地址。例如:union U{ double d; int i; char c; float f;}u;它的大小是其中最大长度double类型的大小..原创 2020-09-23 22:26:42 · 822 阅读 · 0 评论 -
动态库和静态库知识点总结
1、最本质区别是否被编译进程序内部静态(函数)库一般扩展名为(linux下是.a) (windows下是.lib),这类的函数库通常扩展名为libxxx.a或xxx.lib静态库命名格式:lib + "库名称”+ .a(后缀) 例:libadd.a就是一个叫add的静态库这类库在编译的时候会直接整合到目标程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果..原创 2020-09-10 20:55:34 · 239 阅读 · 0 评论 -
指针函数和函数指针
1、指针函数返回指针的函数,本质是一个函数,只不过返回值是一个指针int *fun(int x,int y);int* fun(int x,int y);int * fun(int x,int y);#include <iostream>#include <algorithm>using namespace std;struct Data{ int a; int b;};Data *f(int a,int b){ Data * dat原创 2020-09-10 20:03:05 · 114 阅读 · 0 评论 -
内存泄漏
1、为什么会内存泄漏内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。在C语言中,从变量存在的时间生命周期角度上,把变量分为静态存储变量和动态存储变量两类。静态存储变量是指在程序运行期间分配了固定存储空间的变量而动态存储变量原创 2020-09-09 20:21:14 · 410 阅读 · 0 评论 -
isalpha判断是字母
1、int d = isalpha(c);可以判断是不是字母,如果 c 是一个字母,则该函数返回非零值,否则返回 0。(数字标点都是返回0)#include <iostream>using namespace std;int main(){ int a = 10; char b = 'b'; int c = isalpha(b); printf("%d\n",c); int d = isalpha(a); printf("%d\n",d);原创 2020-09-07 21:15:56 · 262 阅读 · 0 评论 -
cin空格结束 getline可输入空格
#include <iostream>#include <string> // Header file needed to use string objectsusing namespace std;int main(){ string name; string city; cout << "Please enter your name: "; //cin >> name;//这里输入aa bb只会识别aa空格为结束.原创 2020-08-24 15:48:01 · 755 阅读 · 0 评论 -
背包问题01-力扣494目标和
1、DFS暴力超时class Solution {public: int findTargetSumWays(vector<int>& nums, int S) { return dfs(nums,S,0); } int dfs(vector<int>& nums,uint target,int left) { if(target == 0 && left == nums.size原创 2020-08-17 20:29:16 · 1448 阅读 · 0 评论 -
背包问题总结学习
1、力扣4162、典型背包分析物品编号 1 2 3 4 体积 2 3 4 5 价值 3 4 5 6 编号\容量 0(背包容量为0) 1 2 3 4 5 6 7 8 0(前0个物品,就是没有东西) 0 0 0 0 0 0 0 0 0 1 体积2...原创 2020-08-13 20:45:17 · 325 阅读 · 0 评论 -
常量指针与指针常量
1、看 * 和 const 的排列顺序int const* p; //const * 即常量指针 指向的量是常量const int* p; //const * 即常量指针int* const p; //* const 即指针常量 指针的地址是常量2、int const* p; //const修饰的是*p,即*p的内容不可通过p改变,但p不是const,p可以修改,*p不可修改;const int* p; //同上int* const p; //const修饰的是p,p是指..原创 2020-08-13 10:12:27 · 86 阅读 · 0 评论 -
C++四种cast
C++的强制转换方式比C语言更加丰富,常见的有四个:1,const_cast这个操作符可以去掉变量const属性或者volatile属性的转换符,这样就可以更改const变量了。2,static_caststatic_cast 这个操作符相当于C语言中的强制类型转换的替代品。多用于非多态类型的转换,比如说将int转化为double。但是不可以将两个无关的类型互相转化。(在编译时期进行转换)3,dynamic_castdynamic_cast操作符 可以安全的将父类转化为子类,子类转化原创 2020-08-13 10:02:46 · 1998 阅读 · 0 评论 -
指针变量求大小sizeof,求长度不算\0的strlen,以及C++求指针变量的值
1、char* p = "abcdef";cout << "sizeof(p)" << sizeof(p) << p[1] << endl;//c语言默认地址长度4字节//4b//就是定义一个指针变量p。并让str指向"abcdef""在内存中的首地址.如果你要用这个字符串,可以用下标的形式访问p[0]。2、 char q[] = "abcdef"; cout << "sizeof(q)" <&l.原创 2020-08-12 10:31:00 · 5214 阅读 · 0 评论 -
指针做形参
#include<stdio.h> void fun(int *p) { int b=22; p=&b; } int main(void) { int a=1; int *q; q=&a; printf("%d\n",*q); fun(q); printf("%d\n",*q); return 0; } 11#include<std.原创 2020-08-11 22:01:57 · 475 阅读 · 0 评论 -
c++11 之 std::move
引用传参:向函数传递参数的引用调用方法,把引用的地址复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。拷贝构造函数/复制构造函数int a = b;Line line1(10);Line line2 = line1; // 这里也调用了拷贝构造函数Line line2(line1);可取地址有名字左值(lvalue)与右值(rvalue)左值与右值的概念其实在C++0x中就有了。概括的讲,凡是能够取地址的可以称之为左值,反之原创 2020-08-10 16:21:28 · 572 阅读 · 0 评论 -
C++之---内联函数inline
1、什么是内联函数?写一个程序你调用一个函数,就会跳转到那个函数的函数栈上,某些函数如果被频繁调用,会造成栈空间的大量消耗内联函数 inline 返回类型 函数名(形参)就是直接把程序插到调用位置,没有函数栈的出入操作,但是内联函数一般小于10行#include <iostream> using namespace std;inline int Max(int x, int y){ return (x > y)? x : y;}// 程序的主函数int原创 2020-08-10 11:25:35 · 243 阅读 · 0 评论 -
C++11之--智能指针
1、shared_ptr智能指针内存管理的思路shared_ptr智能指针的解决思路:最后一个引用它的对象被释放时,释放这段内存。实现方法:对 被管理的资源 进行计数。当一个sharedptr对象要共享这个资源的时候,该资源的引用计数加1,当该对象生命周期结束了,再把该引用计数减1。这样,当最后一个引用它的对象被释放的时候,资源的引用计数减少到0,此时释放该资源。智能指针最终的实现是 两个指针成员:一个指向数据成员,一个指向计数器成员智能指针里的计数器 维护的是一个指针,指向的 实际内.原创 2020-08-06 15:19:13 · 190 阅读 · 0 评论 -
extern
多个CPP声明 extern int a;//extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”mian int a =0;一个定义...原创 2020-08-05 17:38:02 · 117 阅读 · 0 评论 -
类和对象的区别复习回顾
类只是为所有的对象定义了抽象的属性与行为。对象是类的具体表达,而类则是对象的抽象表达。类和对象(class)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。它们的关系是,对象是类的实例,类是对象的模板。对象是通过new className产生的,用来调用类的方法;类的构造方法 .类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。类是对象的原创 2020-08-05 14:50:56 · 586 阅读 · 0 评论 -
构造函数
构造函数是干什么的?。。。忘了。。。class Counter{public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; } private: // 数据成员 int m_value;}该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作eg: Count转载 2020-08-04 21:28:51 · 128 阅读 · 0 评论 -
C/C++常用头文件及函数汇总
C/C++头文件一览C#include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> //定义错误码#include <float.h> //浮点数处理#include <iso646.h> //对应各种运算符的宏#include <limits.h> //定义各种数据类型最值的常量#include <locale.h&...转载 2020-07-07 09:49:21 · 836 阅读 · 0 评论 -
左移与 左移等于=的区别
x << 1 得到的结果是左移1位后bai的值,它被保存du在一个临时变量中zhi,与x无关,即x的值不变。daox <<= 1 相当于 x = x << 1,是将x左移1位以后的值保存回x中,x发生了变化。好比说:x + 10 得到比x大10的值——在临时变量中,但x不变。x += 10 则是x增大10,x变了。...原创 2020-07-02 21:06:51 · 2007 阅读 · 0 评论 -
并查集
#include <stdio.h>#include <stdlib.h>#define VECTICES 6void initialise(int parent[]){ int i; for(i=0; i<VECTICES; i++) { parent[i] = -1; }}int find_root(int x, int parent[]){ int x_root = x; while(parent[x_root] != -1){...原创 2020-06-10 10:42:03 · 103 阅读 · 0 评论 -
arr[] arr
所谓的形参中的int arr[] 实际上是整个函数声明的一部分,这是将这个参数声明为int型的数组,所以要加上[]来表示数组(其实是当作指针来用的)。而函数调用传参数时,需要传递的是参数名,也就是数组名,当然就不需要[]了。其实传入的是这个数组第一个元素的地址,也就是指向第一个元素的指针。...原创 2020-06-10 10:40:06 · 1940 阅读 · 0 评论 -
内存五区
1,栈:有程序自动分配,友局部变量使用,不需要的时候操作系统自动释放2,堆:由new 开辟需要用delete去释放,不释放的话 操作系统会在程序结束后释3,自由储存区:由malloc开辟出来,需要delete释放,不释放的,操作系统会在程序结束后释(和堆类似)4,全局/静态储存区:用来储存全局变量和静态变量,程序结束后操作系统释放5,常量储存区:存放不允许修改的常量ps:new/delete 与 malloc/free 的区别:1),c++里全部可用,c里面只能用malloc/fre原创 2020-06-09 13:01:26 · 359 阅读 · 0 评论 -
笔试IO输入c/c++
1、万能头文件: #include<bits/stdc++.h>包含了目前c++所包含的所有头文件!!!基本上所有的代码只要用了这个头文件就不再写其他头文件了。原创 2020-06-05 22:16:42 · 151 阅读 · 0 评论 -
如何使用printf输出string类型字符串
1、printf("%s",s.c_str()); 必须要使用 s.c_str();2、3、但是你使用C++ cout没有这个问题原创 2020-06-05 21:46:56 · 2503 阅读 · 0 评论 -
数组名作为函数参数
1、在编译时是将arr按指针变量处理的,相当于将函数f的首部写成f(int *arr,int n);说明:C语言调用函数时采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时,由于数组名代表的是数组首元素地址,因此传递的是地址,所以要求形参为指针变量。值传递没问题但是printf("sizeof(arr)=%ld\n",sizeof(arr));就是一个普通指针的大小了62位 832位 4...原创 2020-06-05 15:46:40 · 576 阅读 · 0 评论 -
递归调用的cnt++问题
1、日常憨憨这里depth+1++depthdepth++区别就在于depth+1我的depth值没有改变所以我后面左右子树都加1不会出现错误++depth我的值已经改变了,这是左右子树加1就有可能冲突比如一个++变成2 另一个又++变成了3depth++直接把depth值带进去函数结束了才++,一样可能重复加/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2020-05-21 20:28:24 · 1066 阅读 · 0 评论 -
二叉树前中后序遍历
#include<iostream>#include<vector>#include<stack>#include<queue> using namespace std;struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int v) :val(v), left(NULL), right(NULL){}}; //-----------.转载 2020-05-17 21:07:15 · 154 阅读 · 0 评论