- 博客(13)
- 收藏
- 关注
原创 【数据结构与算法】map和unordered_map区别及其优缺点
C++的STL库实现有两种字典结构,即map和unordered_map(也就是通俗意义上的hash map)。这两者虽然都称为Map,但其实它们的底层实现原理具有很大差距,因此它们的使用场景也不尽相同。字典类型又被称为关联数组(associative array),关联数组和正常数组的使用方法是相似的,但其不同之处在于字典结构的下标不必是整数,而可以是任意类型。
2023-05-12 20:35:02
12
原创 6、内存泄漏和内存溢出有什么区别?
内存溢出 (out of memory),指程序申请内存时,没有足够的内存供申请者使用。内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误。1、内存中加载的数据量过于庞大,如一次从数据库取出过多数据2、集合类中有对对象的引用,使用完后未清空,使得不能回收3、代码中存在死循环或循环产生过多重复的对象实体4、使用的第三方软件中的 BUG5、启动参数内存值设定的过小一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。
2023-05-12 20:17:46
4
原创 5、C和C++有什么区别?适用场景?
(1)因此C++语言中有类和对象以及继承多态这样的OOP语言必备的内容,此外C++支持模板,运算符重载,异常处理机制,以及一个非常强大的C++标准模板库STL,另外一个Boost库现在也归属C++标准库,提供了很多强大的功能。(2)既然C++是面向对象的OOP语言,因此它还有非常强大的设计模式,比如单例,工厂,观察者模式等等,这些在C语言当中都是不支持的。(3)C语言通过malloc和free来进行堆内存的分配和释放,而C++是通过new和delete来管理堆内存的。
2023-05-12 19:56:47
13
原创 4、C++中的函数重载
是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。//输出B。
2023-05-10 14:24:24
12
原创 3、C/C++中的extern
而且编译阶段,外面是找不到该函数的,但是不报错。它通常是根据参数来区分具体的调用,那换句话说,CPP编译器会将参数类型和函数名字连接在一起,这样编译器就可以根据符号名字的参数进行链接。2、extern可以置于变量或者函数前, extern标识的变量或函数声明定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而。”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
2023-05-10 13:23:52
7
原创 2、strcpy、strncpy、strlcpy和memcpy
它最大的问题是strcpy并不检查目的缓冲区的大小边界,而是将源字符串逐一的全部赋值给目的字符串地址起始的一块连续的内存空间,同时加上字符串终止符。当n<=strlen(s1)时,s2是没有结束符“\0”的,那么用s2的时候没有结束位置,后续对于字符串的操作可能会造成内存的非法访问,因此为了避免发生这种错误,可以手动添加’\0’。在已知dest缓冲区大小并不会造成缓冲区溢出前提下,将src地址开始的字符串复制到以dest开始的地址空间,src字符串的大小。操作成功,返回s2,否则返回NULL。
2023-05-10 13:19:33
16
原创 1、C++中的 new 与 delete
1、new 分配内存按照数据类型进行分配,无需指定空间的大小,编译器会自行计算;malloc 分配内存按照指定的大小分配,需要显式的计算;2、new/delete 返回的是指定对象的指针,而 malloc/free 返回的是 void类型的指针,因此 malloc 的返回值一般都需要进行类型转化。3、new的底层通常使用malloc,然后调用构造函数,最后返回自定义类型的指针。delete先调用析构函数,底层通常是free。4、new 是一个操作符可以重载,malloc 是一个库函数。
2023-05-10 13:09:20
5
原创 专题四:字符串
声明: 参考:代码随想录C++中的resize()函数_c++ resize函数原理_dutmathjc的博客-CSDN博客个人总结归纳,仅用于复习回顾,不做他用!如发现文章内容有误,恳请批评指出! 题型一:反转字符串思路 在反转链表中,使用了双指针的方法。那么反转字符串依然是使用双指针的方法,只不过对于字符串的反转,其实要比链表简单一些。因为字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。对于字符串,我们定义两个指针(也可以说是索引下标)
2023-04-16 10:26:57
5
原创 专题三:哈希表
有时也被称为散列表。哈希表是根据关键码的值而直接进行访问的数据结构。。但是哈希法也是,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
2023-04-07 13:13:44
12
原创 专题二:链表
/ 单链表int val;// 节点上存储的元素// 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数。
2023-04-04 19:08:02
6
原创 专题一:数组
1、数组是存放在连续内存空间上的相同类型数据的集合。2、数组可以通过下标索引的方式获取到下标下对应的数据。1)数组下标都是从0开始的。2)数组内存空间的地址是连续的3)数组的元素是不能删的,只能覆盖。4)使用C++,要注意vector 和 array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。5)在C++中二维数组在地址空间上是连续的。
2023-03-18 17:02:56
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人