自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 new char与delete[]问题,疑惑点终得解开:为什么释放指向的内存空间后,其中的数据还可以继续访问

当我们释放内存时,操作系统会将这块内存标记为可用,但是并不会立即清除内存中的数据。类型的变量,实际上是将指针的值(即指向字符串的内存地址)复制给了另一个指针变量。指向的内存空间时,实际上只是释放了这块内存空间的标记,告诉计算机这块内存空间可以被重新使用了。指向的内存空间中的数据仍然存在,直到这块内存被重新分配给其他变量或者程序结束时才会被清除。指向的内存并没有被释放,因为它们指向的是同一块内存。指向的内存并没有被释放,因为它们指向的是同一块内存。指向的内存空间时,实际上是释放了存储。

2023-07-27 11:25:19 454

原创 c++中字符串截取函数string::substr()使用

类的成员函数,用于提取子字符串。该函数返回一个新的字符串,该字符串是从当前字符串中的指定位置开始的指定长度的子字符串。如果未指定长度,则返回从指定位置到字符串末尾的所有字符。对象,而不是原字符串的子串。如果需要修改原字符串的子串,可以使用。函数是C++标准库中。函数返回的是一个新的。

2023-07-15 20:57:24 4516

原创 if(!vector.size())是什么意思

vector.size()"的结果为真(true)当且仅当vector的大小为0。中元素的个数,它的返回值类型是。,也就是一个无符号整数。是空的,即没有元素,那么。

2023-07-13 00:18:50 112

原创 C++使用sort函数对vector<vector<int>>类型数组进行排序方法

需要注意的是,如果你想要按照其他的排序方式进行排序,比如按照元素的和或者平均值进行排序,就需要自定义比较函数来实现。函数会先比较它们的第一个元素,如果相等则比较第二个元素,以此类推,直到找到不相等的元素为止。类型元素进行排序时,如果不指定排序函数,那么默认会按照字典序进行排序。

2023-07-13 00:08:47 1089

转载 C++中的c_str()函数用法

语法:1 const char *c_str();c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针。比如:最好不要这样:1 char* c;2 string s="1234";3 c = s.c_str();c最后指向的内容是垃圾

2020-08-11 23:22:54 484

原创 Linux网络编程之进程间通信

2020-07-15 19:02:29 139

原创 Linux系统编程之进程基础(PROCESS)

ps aux 查看进程详细信息Linux中printf中加\n,表示强制刷新IO缓冲区

2020-06-11 10:20:03 247

原创 Makefile功能目标

功能目标clean:rm *.o -rfrm app -rfinstall:sudo mv app /user/bin/distclean:sudo rm /user/bin/app功能目标,伪目标(解决文件名与功能目标重名所引发的异常).PHONY:clean install distclean //建立伪目标clean:rm *.o -rfrm app -rfinstall:sudo mv app /user/bin/distclean:sudo rm /user/

2020-06-05 17:43:20 124

原创 Linux GNU工具链GDB调试器

GDB调试器:查找程序中的坏点,用户观察程序执行流程排除BUG的工具

2020-06-05 13:28:40 152 1

原创 Linux GNU工具链Makefile项目管理

GNU开发工具链:vim编辑器、gdb调试器、gcc编辑器、ld链接器、Makefile项目管理器Makefile作用:自动编译管理项目源码,节省编译时间,复用性极强一次编写终身受益Linux下源码编译过程最终生成ELF类型可执行程序文件。工程源码(.c/.cpp等)如test.c.o文件为核心二进制文件...

2020-06-03 15:12:51 237

原创 C++编程中类之间的关系

1.依赖 (Dependency)2.关联 (Association)3.聚合 (Aggregation)4.组合 (Composition)它们的强弱关系是没有异议的:依赖 < 关联 < 聚合 < 组合1.依赖:UML表示法:虚线 + 箭头关系:" … uses a …" 人需要空气 ,(作为一种工具使用)传参使用2.关联: 朋友的平等关系UML表示法:实线 + 箭头关系:" … has a …" 有没有的关系所谓关联就是某个对象会长期

2020-05-30 07:55:55 273

原创 C++中使用STL list 和find函数

作用:在具有指定值的范围内找到元素首次出现的位置。template<class InputIterator, class Type>InputIterator find(InputIterator _First, //一个输入迭代器,它在要搜索指定值的范围内寻址第一个元素的位置。InputIterator _Last, //一个输入迭代器,用于在要搜索的指定值范围内的最后一个元素之后的位置进行寻址。const Type& _Val//要搜索的值。);返回值:一个输入迭代

2020-05-29 12:20:36 8407

转载 C++函数声明的时候后面加const

转自:http://blog.csdn.net/zhangss415/article/details/7998123非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const

2020-05-29 10:51:38 191

原创 简单理解new delete 和malloc free 的区别

new delete 和malloc free 的区别malloc free 分配空间和释放空间new delete 分配空间和释放空间,并触发构造析构函数有时为了提高效率,用malloc和free时,需要手动进行调用构造和析构,并加上作用域,如:CPerson ps = (CPerson*)malloc(sizeof(CPerson));ps->CPerson ::CPersom();ps->CPerson::~CPerson();free(ps);...

2020-05-29 07:11:30 93

转载 memset函数及其用法,C语言memset函数详解

定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:include <string.h>void *memset(void *s, int c, unsigned long n);函数的

2020-05-13 20:12:47 26695 4

原创 红黑树详细分析

RBT----set和map底层原理结构:1、每个节点非红即黑2、根节点必须为黑3、不允许两个红节点互相为父子关系4、我们认为终端节点(NULL/NIL节点)是黑色的,也称之为黑哨兵5、从树中任意节点向下出发,到其所有可能到达的各个终端节点的各个路径上,黑节点的数目必须是相同的。由于以上5个性质,使得红黑上的路径长度不会有一条路径长度超过其他路径长度的两倍。也使得其添加、删除、查找...

2020-05-04 16:33:28 163

原创 数据结构----二叉树梳理

一种一对多的关系树的层数叫做树的高度或深度。路径长度:当前路径下边的个数。度:指当前节点有几个孩子二叉树概念:每个节点最多两个孩子性质:1、假设树的高度为k,总共最多有(2^k)-1个节点2、假设树的高度为k,叶子结点最多有2^(k-1)3、由n0+n1+n2=S,n00+n11+n2*2=S那么n0=n2+1;其中S为总结点个数4、一个具有n个节点的完全二叉树,那么该树的层...

2020-04-25 12:20:12 111

原创 栈与队列--用栈实现队列

需要借助两个栈来实现队列

2020-04-23 11:44:13 113

原创 队列----链表实现功能函数

Queue(FIFO):先进先出尾添加,头弹出。功能函数:Init()Push()Pop()IsEmpty()用链表实现队列:#include<stdio.h>#include<stdlib.h>typedef struct node{ int value; struct node* pNext;}Myqueue;typedef struct ...

2020-04-22 19:00:41 106

原创 栈的实际应用----括号匹配

给定一堆括号,判断左右括号是否匹配。借助栈,左括号进展,遇到有括号,将栈顶元素弹出。若最终栈内无剩余元素,则匹配;若有剩余,则不匹配。该方法缺点当数据量太大时会消耗大量空间。可以用计数法进行改进。计数法:声明count变量,当遇到‘(’,count++;遇到‘)’count–;若count出现小于0情况,则不匹配;若在括号检测结束后,count不为0,则不匹配。...

2020-04-22 16:57:45 158

原创 栈的实际应用----四则运算

四则运算:计算机在进行运算过程会先将中缀转成后缀进行计算。中缀表达式:(9+6)*3-8/4后缀表达式:96+3 * 84/-中缀转后缀规则:借助辅助栈,遇到数字或字母,打印;遇到符号,将当前符号与栈顶符号进行优先级比较。如果当前符号优先级高,则直接入栈,如果当前符号优先级较低,则将栈顶元素依次出栈,直到比当前符号优先级低为止,再将当前符号入栈;如果遇到‘(’,无条件入栈;遇到‘)’,则...

2020-04-22 16:51:09 178

原创 栈的实际应用-----递归(斐波那契序列)

递归:函数重复调用自身代码段,其中不同的是参数。(参数+结束条件)特点:从哪开始调用最终就回到哪去斐波那契序列:f(1) = 1,f(2) = 1f(n) = f(n-1)+f(n-2)递归方式:#include<stdio.h>#include<stdlib.h>int Fib(int n){ if(n<0) { exit(1); }...

2020-04-22 15:54:15 165

原创 栈-----链表头插法实现栈的功能函数

FILO先进后出用链表实现的话要用头插法InitpushpopclearDestoryGetCountGetTopIsEmpty

2020-04-22 10:32:51 175

原创 有效的括号笔记

有效的括号. 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4...

2020-04-15 19:33:18 163

原创 不用+ - * /实现加法运算笔记

练习:不用+ - * /实现加法运算运用位&判断是否发生进位的二进制位置运用位^判断不需要进位的二进制位置比如 7 和 57的二进制位01115的二进制位0101首先判断需要进位和不需要进位的二进制数位置:0111 & 0101 = 0101。故需要进位的是第二位和第四位0111 ^ 0101 = 0010 。故不需要进位的是第三位将0101左移一位(进位):10...

2020-04-14 16:53:41 122

原创 异或 ^ 分析及使用

异或 ^ :相同为0,相异为1。如6^6 = 0;看二进制6:0110即:0110 ^ 0110 = 0;一堆数字用 ^:不同数字进行叠加,若出现相同的数字,则相互抵消相应的数字大小。如 1 ^ 2 ^ 1 = 2;...

2020-04-14 11:35:02 358

原创 虚析构作用及执行顺序

作用:通过父类指针去完整地删除子类的对象,防止内存泄漏执行顺序:从子类到父类依次执行析构函数。

2020-04-14 11:12:07 503

原创 调用函数的两种方式,函数指针的使用

调用函数的两种方式:1:函数名()2:(*函数指针名)()void show(int a){ cout<<"AA"<<a<<endl;}void show1(int a){ cout<<"AA"<<a<<endl;}int main(){ //函数名()-----功能固定 show(1); //...

2020-04-14 09:59:57 412

原创 Date Structure数据结构

用于进行数据的存储和运算集合set:OneToOne线性表(一对一)Tree树(一对多)Graph图(多对多)OneToOne:线性表a1作为首元素有且只有一个后继ai作为中间元素有且仅有一个前驱和一个后继an作为表的最后一个元素,有且只有一个直接前驱,没有后继线性表按存储方式分为两种:顺序存储(如数组、栈)和链式存储(如链表)题:一个数组中有n个元素,每个元素的取值在0~n-...

2020-04-14 09:52:32 421

原创 C++继承与多态机制实现原理

父类类型的指针指向子类对象,父类指针可以指向任何一个子类对象优点:统一类型,提高复用性缺点:该指针只能使用父类中的成员以下代码说明其优点:class kk{};class aa:public kk{};class bb:public kk{};struct Node{ kk*p;};int main(){ Node node; node.p = new aa...

2020-04-14 09:09:54 631

转载 C++何时需要NEW对象,new和定义对象的区别

C++何时需要NEW对象一、CString str;不用new的内存区域是在栈,会自动分配空间,一般在局部变量时使用,函数结束后会自动释放空间,定义对象就是申明对象(静态)str有系统创建并释放,你不要担心会出现内存泄露,但是生命期只有在本区域的大括号内,出了大括号就没用了。构造函数应可以保证被执行,因为程序退出通路很多,你必须是正常的退出才可能保证析构函数被调用,当你创建一个类对象时,...

2020-04-14 08:44:41 947

原创 函数、字符串整理笔记

做什么事起什么名一般首字母大写返回值类型 函数名 参数列表{return相对类型的值(void类型不需要返回值)}return只能返回一个值可以返回数组、结构体等结构中递归函数:(自己调用自己,改变参数之后,实现自我调用)必须有结束条件字符串字符‘0’48空格32A 65 a 97char a[] = “Hello”;栈区内,可更改char *b = “Hell...

2020-04-13 21:33:53 67

原创 数组分析笔记

数组:相同类型元素的集合且空间连续int arr[3] = {1,2,3};int arr[5];数组的名字:表示数组首元素的首地址,如arr&数组名字:表示整个数组的地址,如&arrsizeof(arr):是整个数组的大小arr == &a[0];此时为数组中1的地址arr+1;此时为数组中2的地址(表示往右偏移1个int)&arr+1;表示往右偏...

2020-04-09 22:10:50 85

原创 C++内存分析、堆区和栈区区别

内存中最基本的操作单元是字节对内存的三种操作:读、写、取地址对内存访问的方式:直接访问和间接访问对内存划分:堆区、栈区、字符常量区、代码区、全局/静态区全局和静态的区别:全局在该项目中所有文件中都可使用,而静态只在声明静态的类文件中使用。栈区:存放局部变量,声明的变量和函数方法堆区:存放的是面试常出现堆区和栈区的区别:1、分配方式不同:栈区系统分配系统回收;堆区由程序员手动申请,理...

2020-04-09 19:29:38 990

原创 指针本质及类型判断

指针就是一个变量,一个装地址的变量int a = 1;int *p = &a;二级指针就是一个装着另一个指针地址的变量int **p2 = &p;那么如何看一个变量的类型?去掉变量名,剩下的就是这个变量的类型。如int a,变量a的类型是int型int *p,变量p的类型是int * 类型int **p,变量p的类型是Int ** 类型int p[],变量p的类...

2020-04-09 19:14:00 193

原创 leetcode747至少是其他数字两倍的最大数笔记

两次遍历第一次找到数组最大值索引第二次比较该最大值是否满足2倍条件时间复杂度O(n),n为数组元素个数空间复杂度O(1)class Solution {public: int dominantIndex(vector<int>& nums) { int maxNumIndex = 0; for(int i=0;i<num...

2020-04-09 12:08:58 75

原创 leetcode 724寻找数组的中心索引笔记

给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。题解:1、将数组分为左右两个部分2、将数组元素累加accumulate()作为右边初始值3、左边初始值为04、 ...

2020-04-08 07:46:34 100

转载 C++的STL中accumulate的用法

accumulate定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理1.累加求和int sum = accumulate(vec.begin() , vec.end() , 42);accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。accumulate函数将它的一个内部变量设置为指定的初始值,然后在此初值上累加输入...

2020-04-08 07:31:56 265

转载 vector拷贝

虽是细节,但使用不当,也容易造成严重错误。挖过填过的坑,记录一下。主要有以下几种方法vector list;list.push_back(1);list.push_back(2);一、初始化构造时拷贝vector tem(list);这种拷贝,相当于复制了一份数据,list中的数据不变。二、assignvector temlist;temlist.assign(list.beg...

2020-04-08 07:06:26 726

原创 Linux基础命令

ctrl+shift + ‘+’ 放大字体ctrl+’-’ 缩小字体cat 查看文件内容cat /echo 查看变量内容和回显作用echo SHELL查看变量内容(其中的SHELL 查看变量内容 (其中的SHELL查看变量内容(其中的符号在这表示变量)echo “Hello world”回显ctrl c 终止一个进程第一个表示普通用户;第二个表示普通用户;第二个表示普...

2020-04-01 20:36:22 267

空空如也

空空如也

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

TA关注的人

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