随笔分类 - C++重点
摘要:# 2.为什么析构函数一般写成虚函数 在C++实现多态里,有一个关于 析构函数的重写问题:基类中的析构函数如果是虚函数,那么派生类的析构函数就重写了基类的析构函数。这里他们的函数名不相同,看起来违背了重写的规则,但实际上编译器对析构函数的名称做了特殊处理,编译后析构函数的名称统一处理成destruc
阅读全文
摘要:# 1.C++的多态如何实现 ## 1.多态基本概念 多态是面向对象程序设计语言中数据抽象和继承之外的第三个基本特征。 多态性(polymorphism)提供接口与具体实现之间的另一层隔离,从而将”what”和”how”分离开来。多态性**改善了代码的可读性和组织性**,同时也使创建的程序具有**可
阅读全文
摘要:# 38.hashtable中解决冲突有哪些方法? 哈希表是一种使用哈希函数来计算数据存储位置的数据结构。在哈希表中,可能会遇到两个或多个不同的键被哈希到同一个存储位置的情况,这被称为哈希冲突或碰撞。处理哈希冲突的主要方法有以下几种: 1.**链地址法(Separate Chaining)**:在这
阅读全文
摘要:# 37.STL中unordered_map和map的区别和应用场景 ## 1.STL中unordered_map和map的区别 `std::unordered_map` 和 `std::map` 都是 C++ 标准库中用于存储键值对的关联容器,它们主要的区别在于内部数据的组织方式,以及因此产生的一
阅读全文
摘要:# 36.set和map的区别,multimap和multiset的区别 ## 1.set和map的区别 `std::set`和`std::map`是C++标准库中的两个关联容器,它们都是基于红黑树实现的,但在用途和特性上有一些区别: 1.**元素类型**: - `std::set`:是一个集合容器
阅读全文
摘要:# 34.STL中set的实现? STL中的容器可分为序列式容器(sequence)和关联式容器(associative),set属于关联式容器。 set的特性是,所有元素都会根据元素的值自动被排序(默认升序),set元素的键值就是实值,实值就是键值,set不允许有两个相同的键值 set不允许迭代器
阅读全文
摘要:# 33.STL中的priority_queue的实现 ## 1.priority_queue的介绍 1.优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。 2.此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素 (优先队列中位于顶部的元素)。
阅读全文
摘要:# 32.STL中的heap的实现 版本1: ## 1.堆的原理 堆(Heap)是一种数据结构,通常用于实现优先队列。堆是一种树形结构,通常由一个完全二叉树构成,因此它只有两个指针,即左子节点和右子节点。堆有两种类型:最大堆(Max Heap)和最小堆(Min Heap)。在最大堆中,父节点的值大于
阅读全文
摘要:# 31.STL中stack和queue的实现 ## 1.STL中stack ### 1.栈的概念 栈(Stack)是一种数据结构,它遵循后进先出(Last-In-First-Out,LIFO)的原则,也就是说,最后进入栈的元素最先被取出。栈是一种线性数据结构,它由多个元素组成,每个元素被称为栈项(
阅读全文
摘要:# 30.STL中的deque的实现 ## 1.deque简介 双端队列deque,与vector的最大差异在于: 1.deque运行常数时间对头端或尾端进行元素的插入和删除操作 2.deque没有所谓的容器概念,因为它是动态地以分段连续空间组合而成随时可以增加一块新的内存空间并拼接起来 虽然deq
阅读全文
摘要:# 29.STL中list的实现 ## 1.顺序表 ### 1.顺序表的定义 - 顺序表是用一段**物理地址连续的存储单元**依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 - 顺序表:**可动态增长的数组,要求数据是连续存储的** ```C++ typedef s
阅读全文
摘要:# 28.STL中slist的实现 ## 1.链表结构 ```C++ typedef struct _LinkNode { int data; //结点的数据域 struct _LinkNode* next; //结点的指针域 }LinkNode, LinkList; //LinkList 为指向结
阅读全文
摘要:# 27.STL中vector的实现 作者建议还是稍微看一下底层机制,vector主要有三个指针(迭代器) 来表示的: ●\_Myfirst 和 \_Mylast 可以用来表示 vector 容器中目前已被使用的内存空间; ●\_Mylast 和 \_Myend 可以用来表示 vector 容器目前
阅读全文
摘要:# 26.STL中迭代器失效的情况有哪些? ## 1.STL之vector迭代器失效 `std::vector`是一个动态数组,当其大小或容量发生改变时,其内存可能被重新分配,从而导致已经存在的迭代器失效。以下是几种可能导致迭代器失效的情况: 1.**插入或添加元素**:使用`push_back`或
阅读全文
摘要:# 25.说一下STL每种容器对应的迭代器 | **容器** | **迭代器** | | | | | vector、deque | 随机访问迭代器 | | stack、queue、priority_queue | 无 | | list、(multi)set/map | 双向迭代器 | | unord
阅读全文
摘要:# 24.vector的增加删除都是怎么做的?为什么是1.5或者是2倍? size()函数返回的是已用空间大小,capacity()返回的是总空间大小,capacity()-size()则是剩余的可用空间大小。当size()和capacity()相等,说明vector目前的空间已被用完,如果再添加新
阅读全文
摘要:# 23.常见容器性质总结? C++ STL(Standard Template Library)提供了多种容器,用于存储和操作各种类型的数据。以下是一些常见容器的特性总结: 1.**std::vector**:动态数组,能高效地在末尾进行插入和删除操作,能直接访问任何元素。但在中间位置进行插入或删
阅读全文
摘要:# 22.STL中hash table扩容发生什么? 在 C++ STL 中,`std::unordered_map` 和 `std::unordered_set` 是两个使用哈希表 (hash table) 作为其底层实现的容器。 当哈希表的元素数量增长到某个阈值时,就需要进行扩容。这个阈值通常是
阅读全文
摘要:# 21.STL中的allocator、deallocator
阅读全文

浙公网安备 33010602011771号