c++
文章平均质量分 87
the_nov
这个作者很懒,什么都没留下…
展开
-
29.IO流(了解)
C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。从标准输入设备(键 盘)读取数据,并将值存放在变量中。将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。C语言借助了相应的缓冲区来进行输入与输出。原创 2024-05-16 14:00:52 · 453 阅读 · 0 评论 -
27.C++的类型转换(介绍了static_cast、reinterpret_cast、const_cast、dynamic_cast的用法)
在C语言中,如果。隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败显式类型转化:需要用户自己处理缺陷:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换C风格的转换格式很简单,但是有不少缺点的:隐式类型转化有些情况下可能会出问题:比如数据精度丢失显式类型转换将所有情况混合在一起,代码不够清晰因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。原创 2024-05-14 13:48:49 · 348 阅读 · 0 评论 -
26.特殊类的设计(设计不能被拷贝的类、只能在堆上创建对象的类、只能在栈上创建对象的类、不能被继承的类/只能创建一个对象(单例模式))
为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有。原创 2024-05-13 20:14:46 · 901 阅读 · 0 评论 -
25.智能指针(auto_ptr的使用和模拟实现、shared_ptr的使用和模拟实现、unique_ptr的使用和模拟实现、weak_ptr的使用和模拟实现、智能指针的线程安全问题)
还不能将其称为智能指针,因为它还不具有指针的行为。指针可以解引用,也可以通过。应运而生,其原理:简单粗暴 – >防拷贝(防止智能指针对象被拷贝)。的实现原理:管理权转移的思想,下面简化模拟实现了一份。下面我们先分析一下下面这段程序有没有什么。,因此需要为智能指针管理的资源定制删除器。重载下,才可让其像指针一样去使用。我们仅限于了解,拒绝使用它。调用这里又会抛异常会如何?解决方案(定制删除器)内部释放资源使用的是。原创 2024-05-10 13:20:55 · 693 阅读 · 0 评论 -
24.c++异常(异常的抛出和捕获、异常的重新抛出、抛出异常对象、抛出派生类对象、异常规范)
Start()return ret;原创 2024-05-09 17:47:17 · 1459 阅读 · 0 评论 -
23.c++11新特性(默认移动构造和移动赋值、default关键字、delete关键字、lambda的用法,function包装器和bind绑定的用法,可变参数模板)
如果你没有自己实现。原创 2024-05-09 14:15:09 · 285 阅读 · 0 评论 -
23.右值引用_c++11(左值引用的使用场景、右值引用的使用场景、左值引用和右值引用的对比、移动构造、移动赋值、右值引用完美转发)
右值引用和左值引用减少拷贝的原理不太一样1.左值引用是取别名,直接起作用。2.右值引用是间接起作用,实现移动构造和移动赋值,在拷贝的场景中,如果是右值(将亡值),转义资源。原创 2024-05-08 11:22:06 · 1078 阅读 · 0 评论 -
23.c++11的新特性_1
由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示整形常量。所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针。用橘色圈起来是C++11中的一些几个新容器,但是实际最有用的是。关键字decltype将变量的类型声明指定为表达式的类型。这两个有在单独的博客介绍,其他的大家了解一下即可。让模拟实现的vector也支持{}初始化和赋值。原创 2024-05-05 21:02:41 · 386 阅读 · 0 评论 -
22.位图和布隆过滤
1.给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】2.给定100亿个整数,设计算法找到只出现一次的整数?3.给一个超过`100G`大小的`log file`, `log`中存着`IP`地址, 设计算法找到出现次数最多的`IP`地址?4.给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法原创 2024-05-05 20:31:25 · 712 阅读 · 0 评论 -
21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)
【代码】21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)原创 2024-05-05 18:48:53 · 242 阅读 · 0 评论 -
20.哈希表(哈希冲突,闭散列、线性探测,开散列、哈希桶)
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log_2 N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对和进行介绍。原创 2024-04-30 20:53:08 · 870 阅读 · 0 评论 -
17. map和set的模拟实现(也就是用红黑树封装map和set)
有不清楚的地方,参考和。原创 2024-04-24 23:18:47 · 304 阅读 · 0 评论 -
19.红黑树的模拟实现
/ 枚举结构RED,BLACK,// 红黑树节点的类模板// 存储的KV值对象// 左子树指针// 右子树指针// 父节点指针// 枚举结构对象// 红黑树节点的构造函数:_kv(kv){}原创 2024-04-24 18:29:47 · 728 阅读 · 0 评论 -
18.AVL树的模拟实现
/ 节点的类模板// 键对值的对象 _kv// 左子树的根节点// 右子树的根节点// 父节点int _bf;// balance factor:平衡因子// 节点的构造函数:_kv(kv), _bf(0){}原创 2024-04-24 17:07:45 · 625 阅读 · 0 评论 -
17. map和set的基本使用
/ set的类域std::set// set的类模板如下:在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。与不同,中存储的是真正的键值对<key, value>,set中只放value,但在底层实际存放的是由构成的键值对。set中插入元素时,只需要插入value即可,不需要构造键值对。set中的元素不可以重复(因此可以使用set进行去重)。使用set。原创 2024-04-21 18:01:16 · 620 阅读 · 0 评论 -
15.二叉树进阶(二叉搜索树的模拟实现和二叉搜索树的应用)
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:二叉搜索树:一颗二叉树,可以为空;如果不为空,满足以下性质:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3.它的左右子树也分别为二叉搜索树。原创 2024-04-19 16:26:51 · 439 阅读 · 0 评论 -
14.多态(多态的构成条件、虚函数的重写、抽象类也就是纯虚函数的类、虚函数表、单继承和多继承的虚函数表)
重定义在继承这篇文章中有详细的介绍中有详细介绍3.原创 2024-04-18 15:32:39 · 1652 阅读 · 0 评论 -
13.继承(基类、派生类、同名函数、同名变量、虚拟继承、虚拟继承的原理、继承关系和访问限定符)
下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。/*继承白箱复用假如在类X中,共有100个成员,其中80个是保护成员,20个是共有成员,则任何一个成员的调整都有可能影响类Y耦合度高public继承是一种`is-a`的关系。也就是说每个派生类对象都有一个基类对象。int _x;int _y;原创 2024-04-16 22:09:42 · 734 阅读 · 0 评论 -
12.模板进阶(模板的全特化,偏特化,声明与定义分离)
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2024-04-16 20:31:36 · 879 阅读 · 0 评论 -
11.stack和queue的模拟实现和相关习题(容器适配器和优先级队列)
队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用push_back:在队列尾部入队列pop_front。原创 2024-04-16 19:16:38 · 769 阅读 · 0 评论 -
10.list的模拟实现(普通迭代器和const迭代器的类模板)
list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与非常相似:最主要的不同在于是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(),list通常在任意位置进行插入、移除元素的执行效率更好。与其他序列式容器相比,list和最大的缺陷是不支持任意位置的随机访问,比如:要访问list。原创 2024-04-14 21:31:27 · 637 阅读 · 0 评论 -
9.vector的使用介绍和模拟实现
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector。原创 2024-04-11 21:56:41 · 2086 阅读 · 0 评论 -
8.string库函数的用法以及string的模拟实现
8.string库函数的用法以及string的模拟实现原创 2024-04-10 08:58:27 · 1255 阅读 · 0 评论 -
6.模板初阶(函数模板、类模板、类模板声明与定义分离)
6.模板初阶(函数模板、类模板、类模板声明与定义分离)原创 2024-04-09 17:23:05 · 291 阅读 · 0 评论 -
5.c++内存管理(new、delete、malloc、free的比较)(内存泄漏的问题)
5.c++内存管理(new、delete、malloc、free的比较)(内存泄漏的问题)原创 2024-04-09 16:54:11 · 894 阅读 · 0 评论 -
4.类与对象(下篇)explicit关键字、static关键字、友元函数、内部类、匿名对象。拷贝对象时编译器优化
4.类与对象(下篇)explicit关键字、static关键字、友元函数、内部类、匿名对象。拷贝对象时编译器优化原创 2024-04-09 16:09:49 · 638 阅读 · 0 评论 -
3.类与对象(中篇)介绍了类的6个默认构造函数,列举了相关案例,实现了一个日期类
介绍了类的6个默认构造函数,列举了相关案例,实现了一个日期类原创 2024-04-08 16:50:19 · 1069 阅读 · 0 评论 -
2.类与对象(上篇)
类体中内容称为。原创 2024-04-08 11:11:45 · 636 阅读 · 0 评论 -
1.c++入门(命名空间、缺省参数、函数重载、引用、内联函数、for循环、auto关键字、指针空值nullptr)
(命名空间、缺省参数、函数重载、引用、内联函数、for循环、auto关键字、指针空值nullptr)原创 2024-04-07 22:55:32 · 806 阅读 · 0 评论