上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 49 下一页
摘要: # 14.map、set是怎么实现的,红黑树是怎么能够同时实现这两种容器? 为什么使用红黑树? 1.他们的底层都是以红黑树的结构实现,因此插入删除等操作都在O(lgn)时间内完成,因此可以完成高效的插入删除; 2.在这里我们定义了一个模版参数,如果它是key那么它就是set,如果它是map,那么它就 阅读全文
posted @ 2023-08-02 22:45 CodeMagicianT 阅读(74) 评论(0) 推荐(0)
摘要: # 13.STL迭代器如何实现 1.迭代器是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器,除此之外,STL中迭代器一个最重要的作用就是作为容器与STL算法的粘合剂。 2.迭代器的作用就是提供一个遍历容器内部所有元素的接口,因此迭代器内部必须保存一个与容器相关联的指针,然后重 阅读全文
posted @ 2023-08-02 22:44 CodeMagicianT 阅读(48) 评论(0) 推荐(0)
摘要: # 12.容器内部删除一个元素 ## 1.关联容器的删除 对于关联容器(如map, set,multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase时,递增当前iterator即可。这是因为map之类的容器,使用了红黑树来实现,插入、删除 阅读全文
posted @ 2023-08-02 22:44 CodeMagicianT 阅读(170) 评论(0) 推荐(0)
摘要: # 11.Vector如何释放空间? 由于vector的内存占用空间只增不减,比如你首先分配了10000个字节,然后erase掉后面9999个,留下一个有效元素,但是内存占用仍为10000个。所有内存空间是在vector析构时候才能被系统回收。empty()用来检测容器是否为空的,clear()可以 阅读全文
posted @ 2023-08-02 22:43 CodeMagicianT 阅读(336) 评论(0) 推荐(0)
摘要: # 10.STL 中vector删除其中的元素,迭代器如何变化?为什么是两倍扩容?释放空间? size()函数返回的是已用空间大小,capacity()返回的是总空间大小,capacity()-size()则是剩余的可用空间大小。当size()和capacity()相等,说明vector目前的空间已 阅读全文
posted @ 2023-08-02 22:42 CodeMagicianT 阅读(242) 评论(0) 推荐(0)
摘要: # 9.vector与list的区别与应用?怎么找某vector或者list的倒数第二个元素 1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的 阅读全文
posted @ 2023-08-02 22:39 CodeMagicianT 阅读(349) 评论(0) 推荐(0)
摘要: # 8.STL的两级空间配置器 ## 为什么有适配器? (1)小块内存带来的内存碎片问题 单从分配的角度来看。由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下就是堆中空闲的内存总量满足一个请求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足这个请求)。 (2)小块内存频繁申 阅读全文
posted @ 2023-08-02 22:27 CodeMagicianT 阅读(168) 评论(0) 推荐(0)
摘要: # 7.简单说一下traits技法 traits技法利用“内嵌型别“的编程技巧与**编译器的template参数推导功能**,增强C++未能提供的关于型别认证方面的能力。常用的有iterator_traits和type_traits。 **iterator_traits** 被称为**特性萃取机** 阅读全文
posted @ 2023-08-02 22:23 CodeMagicianT 阅读(184) 评论(0) 推荐(0)
摘要: 6.STL中hashtable的实现? STL中的hashtable使用的是开链法解决hash冲突问题,如下图所示。 hashtable中的bucket所维护的list既不是list也不是slist,而是其自己定义的由hashtable_node数据结构组成的linked-list,而bucket聚 阅读全文
posted @ 2023-08-02 22:22 CodeMagicianT 阅读(93) 评论(0) 推荐(0)
摘要: # 5.说一下C++左值引用和右值引用 C++11正是通过引入右值引用来优化性能,具体来说是通过移动语义来避免无谓拷贝的问题,通过move语义来将临时生成的左值中的资源无代价的转移到另外一个对象中去,通过完美转发来解决不能按照参数实际类型来转发的问题(同时,完美转发获得的一个好处是可以实现移动语义) 阅读全文
posted @ 2023-08-02 22:20 CodeMagicianT 阅读(535) 评论(0) 推荐(0)
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 49 下一页