自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL源码剖析第一章阅读笔记

STL中任何组件都有最大的独立性,并以所谓迭代器(iterator)胶合起来,或以所谓配接器(adapter)互相配接,或以所谓仿函数(funtor)动态选择某种策略。STL的六大组件:容器、算法、迭代器、仿函数、配接器、配置器从实现的角度来看,迭代器是一种将operator*、operator->、operator++、operator–等指针相关操作予以重载的class template。仿函数是一种重载了operator()的class或class template。STL提供的que.

2021-02-03 20:34:20 147

原创 用队列实现栈

题目:用队列实现栈题目链接我的思路:初始化两个队列queuepush操作:数据直接送入队列1中。pop操作:将队列1中的元素依次送入到队列2暂存直到队列1中只剩下一个元素,然后将该元素返回并pop掉,之后再将队列2中的元素送回queue中。top操作:与pop操作类似,将队列1中的元素依次送入到队列2暂存直到队列1中只剩下一个元素,然后将该元素记录下并返回,之后送入队列2中,之后再将队列2中的元素依次送入到队列1中。class MyStack {public: /** Initial

2021-02-03 20:17:05 135 1

原创 用栈实现队列

题目简述:用两个栈实现队列题目链接我的思路:初始化两个栈s1,s2push操作:将元素压入栈1。pop操作:先将栈1的所有数据压入栈2,再从栈2进行pop,之后再将栈2的数据压回栈1。peek操作:与pop操作类似,先将栈1的所有数据压入栈2,再读取栈2顶的元素,之后再将栈2的数据压回栈1。class MyQueue {public: /** Initialize your data structure here. */ MyQueue() { } /**

2021-02-03 16:35:26 158

原创 C++中打印字符指针的地址

问题描述:今天无意中遇到一个问题,有如下程序,我想打印两个对象中的字符指针的地址来验证系统提供的赋值运算符重载是否是浅拷贝,结果直接cout字符指针输出的并不是指针的地址而是整个字符串,为什么呢?#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string.h>using namespace std;class ClassA{public: ClassA() { } ClassA(

2021-01-11 21:24:51 2536

原创 四种类型转换:static_cast,const_cast,reinterpret_cast,dynamic_cast

一、为什么C++中不使用C中的强制类型转换而增加这四种类型转换?C中的强制类型转换看似很强大,可以在任意类型之间转换,不能进行错误检查,容易出错(比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的)。C风格的转换不容易查找,它由一个括号加上一个标识符组成,这样的东西在C++程序里一大堆。所以C++为了克服这些缺点,引进了四种新的类型转换操作符。二、四种类型转换的使用场合1.静态类型转换:

2020-11-12 09:04:35 1119

原创 局部变量或局部对象是否可以返回

一、C语言中局部变量的返回大原则:不要在自动变量(不管是表达式中间结果的临时变量(如果它不能保证总优化到寄存器中)还是源程序中有明确名字的auto变量)生命期结束后还试图解引用它。局部变量作为返回值时,一般是系统先申请一个临时对象存储局部变量,也就是找个替代品,这样系统就可以回收局部变量,返回的只是个替代品。也就是说,返回的过程中产生了“中间变量”作为纽带。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容

2020-10-29 16:58:00 1154

原创 关联容器——map和multimap的用法

一、map和multimap的区别map不允许键值对重复,但multimap允许。关联容器按照自身的特点分为八种不同的容器:仅包含关键字key还是包含键值对key-value,前者取名集合set,后者取名映射map;关键字key是否允许重复,允许重复的包含multi;是否按照hash函数映射的方式组织元素,是则加上unordered。二、map与multimap的构造首先讲一下pair类型:1、pair是定义在头文件中的一个类 模板,有两个类型参数分别对应其内部的两个数据成员,其类型

2020-10-26 15:51:13 3235

原创 带形参的main函数

最近学习到Linux文件I/O,意外看到了带有形参的main函数,虽然以前知道main函数可以带有形参,但一直也没有用过。形式如下:int main(int argc,char* argv[]){}由于main函数不能被其他函数调用,因此不能在程序内部取得实际值,那么该如何获得参数的值呢?实际上,main函数的参数值是从操作系统命令行上获得的!其中,argv[0]存储的是该程序的当前路径,其余存储的是从命令行获取的参数,argc表示argv[]中参数的个数。下面在Ubuntu中进行实验,代码如

2020-09-14 10:51:44 1547

原创 二叉树的三种遍历方式区分

二叉树典型的遍历方式有如下三种: 前序遍历 中序遍历 后续遍历前序遍历:先访问根节点,再访问左子节点,最后访问右子节点中序编历:先访问左子节点,在访问根节点,最后访问右子节点后序遍历:先访问左子节点,再访问右子节点,最后访问根节点下面让我用通俗的语言来解释,保证让你彻底理解和记住以前序遍历为例:分开看,从全局上把握先访问根节点10,再访问左子树在左子树中按照前序遍历则先访问根节点6,再访问左子树4,再访问右子树8,这样根10的左子树就访问完了,接下来访问根10的右子树

2020-08-30 15:18:11 1081

原创 new和delete六问

问题1:new一个对象后面加与不加()的区别是什么对于有自己写构造函数的类,不论类型名后面有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。问题2:new的用法格式是什么1.开辟单变量地址空间一般使用格式:格式1:指针变量名=new 类型标识符;格式2:指针变量名=new 类型标识符(初始值);格式3:指针变量名=new 类型标识符 [内存单元个数];格式1和格式2都是申请分配某

2020-08-26 21:59:03 135

转载 理解二级指针

一、明确概念对于一个普通变量,进行引用操作,得到的是一级指针。如int a=0;int p=&a,则&a就是一级指针。因为&a的值就是a的地址,p的值也是a的地址,则&a和p就是一级指针变量(简略为指针),对&a进行解引用操作,int b=&a;这b等于0.对于普通变量作为形参传递到函数内部,参数的值传递就意味着只是简单的将变量的值copy了一份到临时变量中,然后将临时变量传递给函数,然而临时变量和原始变量是没有任何关系,则函数是无法改变外部原始变

2020-08-26 15:48:39 491

原创 《C和指针》第十章-结构和联合 学习笔记

一、 结构体的声明和创建1.下面这个声明创建了一个名叫x的变量,它包含三个成员:一个整数、一个字符和一个浮点数。struct { int a; char b; float c;} x;2.这个声明创建了y和z。y是一个数组,它包含了20个结构。z是一个指针,它指向这个类型的结构。struct { int a; char b; float c;} y[20] , *z;3.这个声明把标签SIMPLE和这个成员列表联系在一起。该声明并没有提供变量列表,所以它并未创建任何变量。st

2020-08-24 21:28:24 145

原创 《C和指针》第6章-指针学习笔记

内存中的每个位置由一个独一无二的地址标识,内存中的每个位置都包含一个值高级语言通过名字而不是地址来访问内存的位置,名字与内存位置之间的关联并不是硬件所提供的,它是由编译器为我们实现的,硬件仍然通过地址访问内存位置指针存储的是其指向的地址,通过间接访问操作符*才能得到其指向地址中的内容int a = 112,b = -1;float c = 3.14;int *d = &a;float *e = &c;表达式右值类型a112intb-1i.

2020-08-08 22:41:15 112

原创 左值和右值

1.什么是左值左值就是那些能够出现在赋值符号左边的东西。2.什么是右值右值就是那些可以出现在赋值符号右边的东西。例如:a =b + 25;b +25 = a;//非法第一条语句中:a是左值,b+25是右值第二条语句中:a此时也可以当作右值,而b+25不能作为左值,因为它并未标识一个特定的位置int a[30];...a[b + 10] = 0;表达式的左边是个表达式,它是个合法的左值int a , *pi;...pi = &a;*pi = 20;第2

2020-08-08 16:33:32 133

原创 const修饰成员函数

常成员函数1、 const修饰函数的意义承诺在本函数内部不会修改类内的数据成员,不会调用其它非const成员函数。函数能访问const数据成员和非const数据成员,但不能修改非const数据成员加了const的成员函数可以被非const对象和const对象调用 ,但不加const的成员函数只能被非const对象调用2、const修饰函数位置const修饰函数时放在:声明之后,实现体之前。可能是因为也没有其他地方可以放了。...

2020-08-01 20:23:28 169

原创 面试题02.02.返回倒数第K个节点

面试题02.02.返回倒数第K个节点原题链接 :面试题02.02.返回倒数第K个节点题目实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution

2020-06-07 17:30:24 140

原创 237.删除链表中的节点

237.删除链表中的节点题目描述原题链接:删除链表中的节点请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {

2020-06-01 22:22:55 122

转载 copyTo的用法

第一种:A.copyTo(B),表示将A矩阵复制到B中第二种:A.copyTo(B, mask),表示得到一个附加掩膜mask的矩阵B链接:https://blog.csdn.net/Sophia_11/article/details/84674863

2019-11-13 10:31:27 3103

原创 C++中new的用法

1.开辟单变量地址空间例如:int *p = new intint *p = new int(1)开辟大小为sizeof(int)的内存空间,并初始化为1,指针p指向该内存空间2.开辟数组空间例如:int *p = new int[5] {1}开辟一个大小为5的整型数组空间,并初始化为1,指针p指向数组首地址二维:int (*p)[5] = new int[3][5]3.new一个...

2019-11-13 10:21:43 705

原创 二值图和灰度图的区别

链接:http://blog.sina.com.cn/s/blog_13c6397540102wqtt.html

2019-11-13 09:49:32 5000 1

空空如也

空空如也

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

TA关注的人

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