
c++
sdau_blue
念念不忘,必有回响。驰而不息,功不唐捐。
展开
-
HashMap相关
一、HashMap的实现原理?1.你看过HashMap源码+原理针对这个问题,嗯,当然是必须看过HashMap源码。至于原理,下面那张图很清楚了:HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体。只是在JDK1.8中,链表长度大于8的时候,链表会转成红黑树!2.为什么用数组+链表?数组是用来确定桶的位置,利用元素的key的hash值对数组长度取转载 2020-05-22 10:04:54 · 344 阅读 · 0 评论 -
如果new 一个对象,用free去释放,会有什么问题?
关于C++里面的NEW/DELETE和maclloc/free。昨天面试的时候被问到这个问题,如果new 一个对象,用free去释放,会有什么问题?一时被问到这个陌生,于是就感觉来说,应该会报错。因为new与FREE不是配对的内存操作API。后转念一想,delete也是清除分配的内存,free也是同样的功能,可能不会报错,再加上因为delete处理过程中比free多一步就是调用析构函数。...原创 2020-04-08 11:46:07 · 2954 阅读 · 2 评论 -
类和结构体的区别
1.结构体是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。 那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。2. 结构体使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.堆的空间相对较大.但是存储在堆中的数据的访问效率相...原创 2020-04-07 17:52:06 · 21933 阅读 · 0 评论 -
内存分配分为三种:静态、栈区、堆区
总述内存分配分为三种:静态、栈区、堆区分别解释(1)静态存储区:主要存放static静态变量、全局变量、常量。这些数据内存在编译的时候就已经为他们分配好了内存,生命周期是整个程序从运行到结束。(2)栈区:存放局部变量。在执行函数的时候(包括main这样的函数),函数内的局部变量的存储单元会在栈上创建,函数执行完自动释放,生命周期是从该函数的开始执行到结束。(例如,delay_ms(){ i...原创 2020-04-07 15:04:17 · 3273 阅读 · 0 评论 -
指针和引用的区别
本质上的区别是,指针是一个新的变量,只是这个变量存储的是另一个变量的地址,我们通过访问这个地址来修改变量。而引用只是一个别名,还是变量本身。对引用进行的任何操作就是对变量本身进行操作,因此以达到修改变量的目的。注:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;引用:跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int ...原创 2020-04-07 11:33:39 · 208 阅读 · 0 评论 -
深拷贝和浅拷贝
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。假设B复制了A,修改A的时候,看B是否发生变化:如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,深拷贝(deepCopy)是增加了一个指针并且申请了一...原创 2020-04-07 11:24:25 · 167 阅读 · 0 评论 -
inline的使用
目录1.inline函数的介绍:1.1.引入inline相关知识: 1.2.使用inline的好处:2.inline函数和宏的区别:3.如何使用类的inline函数: 3.1.在类中定义这种函数: 3.2.在类外定义前加inline关键字: 3.3.此外含有一些规则需注意: 3.4.inline 是一种“用于实现的关键字”4.慎...原创 2020-04-06 19:10:24 · 3241 阅读 · 3 评论 -
C++野指针
野指针: 野指针不同于空指针,空指针是指一个指针的值为null,而野指针的值并不为null,野指针会指向一段实际的内存,只是它指向哪里我们并不知情,或者是它所指向的内存空间已经被释放,所以在实际使用的过程中,我们并不能通过指针判空去识别一个指针是否为野指针。避免野指针只能靠我们自己养成良好的编程习惯,下面说说哪些情况下会产生野指针,以及怎样避免。1. 指针变量的值未被初始化:...原创 2020-03-27 19:37:18 · 440 阅读 · 0 评论 -
栈和堆的区别
3.1.2 栈和堆的区别前面已经介绍过,栈是由编译器在需要时分配的,不需要时自动清除的变量存储区。里面的变量通常是局部变量、函数参数等。堆是由malloc()函数(C++语言为new运算符)分配的内存块,内存释放由程序员手动控制,在C语言为free函数完成(C++中为delete)。栈和堆的主要区别有以下几点:(1)管理方式不同。栈编译器自动管理,无需程序员手工控制;而堆空间的申请...原创 2020-03-27 19:07:03 · 1740 阅读 · 1 评论 -
虚函数的作用及使用方法
转载自:http://c.biancheng.net/cpp/biancheng/view/244.html我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。打个比方,假设在Circle类中定义了 area函数,在Circle类的派生类Cylinde...转载 2020-03-18 15:25:00 · 9962 阅读 · 7 评论 -
STL中迭代器的作用,有指针为何还要迭代器
转载: https://blog.youkuaiyun.com/N1314N/article/details/929576421、迭代器Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表...转载 2020-03-17 11:05:25 · 1126 阅读 · 0 评论