C++基础
文章平均质量分 62
dog head
这个作者很懒,什么都没留下…
展开
-
STL源码剖析阅读笔记四(序列容器list)
一、概述 list和上一章的vector都是我们平时开发最常用到的容器。但与vector不一样的是,list并非一个绝对固定的连续空间的容器,之所以设计成这样还是考虑了连续空间删除插入的时间消耗。STL的list事实上是一个双向链表,了解链表概念的应该明白,这种前后可移动的链表结构提供了非常灵活的操作性。二、定义2.1 节点形式 它的节点形式可以比较形象化地展示为下图的样子: 而具体的代码也很简单:template <class T> struct __list_node {原创 2022-03-04 15:23:25 · 696 阅读 · 0 评论 -
STL源码剖析阅读笔记三(序列容器vector)
一、概述 我们平时使用数组(array)时是不是经常因为扩容问题而头疼,其实vector与array之间多的就是空间配置的部分。本章序列容器的vector对array进行了空间管理的封装以及几种迭代器的封装,从而实现了我们所认识的第一个序列容器——vector。二、定义式 代码示例:// alloc 是 SGI STL 的空間配置器,見第二章。 template <class T, class Alloc = alloc> class vector {public:// vect原创 2021-11-08 18:02:15 · 134 阅读 · 0 评论 -
C++基础——std::optional(转载)
一、前言 有时我们会用一个值来表示一种“没有什么意义”的状态,这就是C++17的std::optional的用处。 在编写程序时,我们常常遇到一种情况,那就是我们不总是有一个固定值来表示一个事物。例如,找出文本中的第一个偶数(如果存在的话)。或者一个类有一个可选的成员函数,即一个不是总需要被设置的成员函数。在以前的代码中,这些情况一般使用魔术值(magic value)或者空指针(null pointers)来表示。一个魔术值可以是一个空的字符串、0、-1或者一个最大的非负值(例如std::str转载 2021-10-13 11:16:17 · 1773 阅读 · 0 评论 -
C++基础——final 关键字
C++中,final关键字用于修饰类时,有以下作用: 1.禁止继承:c++11特性中,将类标记为final,意味着无法继承。class test final{ ......}; 2.禁止重写方法:当方法被标记为final时,在子类中无法重写该方法。class test{ public: test(); virtual void func() final;};...原创 2021-10-12 11:10:22 · 4714 阅读 · 1 评论 -
STL源码剖析阅读笔记二(迭代器)
前言原创 2021-08-09 14:12:15 · 159 阅读 · 0 评论 -
C++基础——内联函数(转载)
C++基础——内联函数(转载)文章目录C++基础——内联函数(转载)前言前言 C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。 对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。 如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inli原创 2021-08-09 10:58:53 · 221 阅读 · 0 评论 -
C++基础——嵌套类
C++基础——嵌套类文章目录C++基础——嵌套类前言前言 在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型。之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。 这个可以这样理解:有一些工作我们不想被用户知道怎么实现的,那么我们就把这些工作交给类内的嵌套类来实现,然后对我提供一个接口即可。class A { class Imp; Imp* imp原创 2021-08-06 11:07:35 · 1273 阅读 · 0 评论 -
C++基础——记一次双冒号(::)的使用
C++基础——记一次中双冒号(::)的使用文章目录C++基础——记一次中双冒号(::)的使用前言前言原创 2021-08-04 21:01:08 · 743 阅读 · 0 评论 -
STL源码剖析阅读笔记一(空间配置器)
空间配置器作为隐藏在一切组件背后的关键组件,是学习STL源码的重要内容。事实上allocator不应该称为空间配置器,而应该称为内存配置器。因为空间并不一定是内存,也可以是磁盘或者其他辅助存储介质。//.h文件#ifndef _JJALLOC_#define _JJALLOC_#include <new>#include <cstddef>#include &...原创 2019-05-01 11:36:58 · 184 阅读 · 0 评论