侯捷C++ STL 视频笔记
文章平均质量分 68
侯捷C++ STL 视频笔记
sheep_77
这个作者很懒,什么都没留下…
展开
-
侯捷STL 1. 认识headers、版本、重要资源
认识headers、版本、重要资源原创 2023-07-08 14:04:01 · 47 阅读 · 0 评论 -
侯捷STL 2. STL体系结构基本介绍
iterator&是引用,取出来的每个元素都是引用,并将引用赋值给elem,才可以改变它的数据。iterator 是值迭代器,会将元素的副本赋值给elem,所以并不会改变容器中的元素。auto 的 类型 是 Container::iterator。decl 是“declare type”的缩写,译为“iterator 和 iterator& 的区别。指向的则是最后一个元素的下一个位置。C++ 11 新语法 (增强for)所指向的区间就是前开后闭区间。指向的是容器中的第一个元素。原创 2023-07-08 14:08:50 · 272 阅读 · 0 评论 -
侯捷STL 3. 容器之分类与各种测试 (一)
侯捷STL 容器之分类与各种测试之容器介绍、array测试原创 2023-07-09 13:05:08 · 94 阅读 · 1 评论 -
侯捷STL 4. 容器之分类与各种测试 (二)
侯捷STL容器之分类与各种测试之vector测试原创 2023-07-09 13:07:16 · 67 阅读 · 1 评论 -
侯捷STL 5. 容器之分类与各种测试 (三)
一样,区别是forward_list 是标准库中的,而slist不是。原创 2023-07-10 14:09:07 · 66 阅读 · 1 评论 -
侯捷STL 6. 容器之分类与各种测试 (四)
【代码】侯捷STL 6. 容器之分类与各种测试 (四)原创 2023-07-10 14:14:41 · 84 阅读 · 1 评论 -
侯捷STL 7. 分配器之测试
模板都有两个参数,第一个是typename,第二个有默认参数,分配器<typename>,所以一般不用写。allocator 也可以单独使用,如图二右侧,其中参数1,表示要申请一个元素的空间。因为用malloc和free分配内存,只需要申请多少个字节,不需要指明要还多少字节。不值得这样用,因为不使用容器,使用很少的变量,只需要单独开辟空间即可。用分配器要还指针,也要还元素个数,负担重,应该使用容器,而不是分配器。课上的测试都是在gnuc下的,即gcc。但是主要还是用与容器。原创 2023-07-11 23:57:16 · 51 阅读 · 0 评论 -
侯捷STL 8. 源代码之分布 VC, GCC
课程中用的是 gnuc 2.9 和 VC 6.0 的版本。2. 在Dev C++中 gcc include的目录。\include文件夹中。原创 2023-07-11 23:58:50 · 58 阅读 · 0 评论 -
侯捷STL 9. OOP 面向对象编程 vs GP 泛型编程
gunc 2.9 用的 OOP 比较少,继承关系很少,所以比较易读OOP: 数据和操作,放在同一个 class 里在标准库中如 list,list有 sort() 操作,sort() 是放在类内的GP: 将数据和操作分开vector 和 deque 内部就没有 sort(),sort() 在 algorithm 里利用全局函数来排序,就要用到迭代器,用 c.begin() 和 c.end() 告诉算法范围,就可以进行排序了。原创 2023-07-11 23:59:29 · 74 阅读 · 0 评论 -
侯捷STL 10. 技术基础:操作符重载 and 模板泛化, 全特化, 偏特化
1. 操作符重载这里是对迭代器操作符重载,使它具备指针的性质2. 模板当要写一个复数类的时候,如果没有利用模板,那么定义的时候就要确定好实部和虚部的数据类型定义了两个stone 当调用 min() 时,就会进行实参推导,即对 T 进行推导,得到 T 是 stone,调用 stone : : operator<()3. 类模板和函数模板的区别类模板的使用需要用尖括号,指出要声明的类型 函数模板不需要指出 因为函数模板可以推导,而类模板有些时候类内有成员,而不用赋初值,原创 2023-07-12 00:00:15 · 67 阅读 · 0 评论 -
侯捷STL 11. 分配器
BC 在 C++ 编程领域通常指的是 "Bjarne's C++",它是由 C++ 语言的创始人 Bjarne Stroustrup 开发和推广的一种 C++ 编程环境。BC 平台旨在提供一个方便学习和实践 C++ 的工具集合,其中包括编译器、调试器和其他开发工具。它的全称是 "Bjarne's C++" 或者 "Bjarne's C++ Environment"。请注意,BC 平台不是一个官方的、广泛使用的 C++ 平台,而是由 Bjarne Stroustrup 个人推广的工具集合。原创 2023-07-12 00:00:51 · 54 阅读 · 0 评论 -
侯捷STL 12. 容器之间的实现关系与分类
缩排的形式,来表现衍生关系,这里的衍生不是继承,而是复合(拥有,如set中有红黑树) 有 A B 两个类,如果 A 要用到 B 中的功能,可以让 A 继承 B,也可以让 A 包含一个 B rb_tree 是红黑树 slist 以及 hash_ 开头的都是非标准的 在 /ext/ 中 在 C++ 11 中,标准库中提供,slist 为 forward_list,而hash_ 也变成unordered_原创 2023-07-12 00:01:24 · 47 阅读 · 0 评论 -
侯捷STL 13. 深度探索list
1. listlist 在 G2.9 中用的分配器是 alloc list 中的 data 是 node,类型是 link_type,link_type 是 list_node* ,是一个指针指向 list_node,指针的大小为 4 个字节(32位) __list_node 中有三个变量,分别是 data,prev,next,prev,next是指针,类型是 void_pointer ,即 void,用 void* 后还要转型,在后续的 G4.9 中有优化 list 去申请内存,要有三部原创 2023-07-13 23:58:11 · 75 阅读 · 1 评论 -
侯捷STL 14. 迭代器的设计原则和Iterator Traits的作用与设计
1. 算法引出 Iterator Traits容器使用算法操作的时候,算法会想要知道 iterator 的某些属性 以 rotate算法 举例 第一个想要的 traits 是 iterator 的 category,也就是 iterator 的移动性质,如是否可以++,--,以及 +=,以便采取最佳的操作方式 第二个想要的 traits 是 iterator 的 difference_type,也就是容器中两个 iterator 的距离 第三个想要的 traits 是 iterator原创 2023-07-13 23:58:45 · 194 阅读 · 0 评论 -
侯捷STL 15. vector深度探索
vector 实际上就是一个数组,在数组内存用完的时候就会自动扩充,两倍扩充,找一块内存更大的空间,将数据迁移其中有三个指针,start、finish、end_of_storage分别指向 size范围内的起始位置、终止位置以及 capacity 的终止位置。原创 2023-07-13 23:59:18 · 213 阅读 · 0 评论 -
侯捷STL 16. array、forward list深度探索
1. array 在 TR1 的实现TR1 是 1998 - 2003 之间的一个过渡版本 array 区别于其他容器,它的模板参数要传入两个,第一个是数据类型。第二个是大小,因为 array 是数组,性质是不可扩充的 array 没有构造函数和析构函数 begin() 和 end() 就是头和尾,直接采用索引返回即可 array 的 迭代器,array 是连续空间,所以它的迭代器可以是指针 ( G2.9 的 vector 也是用指针当作迭代器 ),所以 array 给算法提供 asso原创 2023-07-14 00:00:00 · 216 阅读 · 0 评论 -
侯捷STL 17. deque、queue和 stack深度探索
1. deque 容器1.1. buffer元素是存放在一个个buffer中的 图中阴影部分就是未存放数据的 buffer 因为是一段段 buffer,所以 deque 是 分段连续 每个 buffer 是放在一个 vector 之中的,vector 中的每个元素是一个指针,指向每个buffer buffer 的次序就看 vector 中指针的次序 deque 往后扩充,只需要在 vector 后方用一个指针指向一个新的 buffer 就可以实现扩充 向前扩充同理,也是让一个指针原创 2023-07-14 00:00:35 · 351 阅读 · 0 评论