C++
文章平均质量分 71
c++
小明的笔记仓库
转载笔记来自互联网资料整理。
仅供个人学习用途。
展开
-
C++优质资源
C++实现常用八大排序算法—实现及其对比_YAIMZA的博客-CSDN博客_c++排序算法 常见的七种排序算法(插入排序—直接插入排序和希尔排序)_YAIMZA的博客-CSDN博客 平衡搜索树—红黑树RBTree_YAIMZA的博客-CSDN博客 平衡搜索树-AVLTree_YAIMZA的博客-CSDN博客_平衡搜索树 归并排序算法详解及其优化_YAIMZA的博客-CSDN博客_归并排序算法 ...原创 2021-12-18 22:35:05 · 2583 阅读 · 0 评论 -
【C语言】笔记总结—思维导图
转载 2021-12-18 22:29:00 · 206 阅读 · 0 评论 -
【C++】思维导图
转载 2021-12-18 22:11:39 · 370 阅读 · 2 评论 -
二叉树___
遍历前序遍历中序遍历后序遍历层序遍历树的层次遍历算法思想:①初始化一个辅助队列②根结点入队③若队列非空,则队头结点出队,访问该结点,并将其左、右孩子插入队尾(如果有的话)④重复③直至队列为空递归1.刷题套路 二叉树的递归解题套路:设定当前节点为根节点,首先,根据当前节点运行的情况,考虑递归的停止条件和返回的结果;然后,根据题目确定根节点从左子节点和右子节点中获取的信息(可以建立两个类存放获取的信息);接下来,在当前节点...原创 2021-12-14 10:56:24 · 214 阅读 · 0 评论 -
STL概论——源码之前,了无秘密
“在研究STL的过程中,每一分每一秒我们都要谨记在心,效率是个重要课题。”——侯捷1、为什么要建立STL:程序的复用性的提升(建立在标准之上)2、STL的价值:1)STL带来了极具实用价值的组件2)以泛型思想为基础的”软件组件分类学”,STL是一个抽象概念库3、一句话总结STLSTL实现的的是以抽象概念构架起的接口标准。在这个接口下,任何组件相互独立;任何组件通过Iterator胶合;通过adaptor配接;通过functor选择policy4、STL形成cl.原创 2021-12-14 10:56:46 · 485 阅读 · 0 评论 -
STL源码——序列式容器priority_queue源码剖析
一、priority_queue概述priority_queue是一种以权值进行排序的queue。由于其也是一个队列,因此也遵循先进先出(FIFO)的原则,其形式如下图所示:特点:priority_queue会对队列中的元素根据权值进行排序(权值默认为元素的值),权值最高的在队列的头部底层实现:SGI STL默认用一个max-heap来实现priority_queue,而max-heap又是以vector实现的complete binary tree。因此priority_queue是默认以转载 2021-12-14 10:56:43 · 359 阅读 · 0 评论 -
STL源码——空间配置器
1.概述整个STL的操作对象(所有的数值)都存放在容器之内,而容器一定需要配置空间以置放资料。一般C++内存配置和释放操作是这样的:class A {};A* pa = new A;//...执行其他操作delete pa;这其中的new算式内含两阶段操作:(1)调用:: operator new配置内存(2)调用Fo::F0o()构造对象内容。 delete算式也内含两阶段操作:(1)调用Foo::~foo()将对象析构;(2)调用:: operator delete释放内存为转载 2021-12-14 10:56:45 · 246 阅读 · 0 评论 -
STL源码——迭代器iterators
1.迭代器作用迭代器(iterators)是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物。《Design Patterns》中iterator模式定义如下:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶合剂(iterator)将它们撮合在一起。迭代器是数据结构容器中非常有用的“特殊指针”,在不暴露容器中结构的条件下,可以取出容器里所有的元素。2.迭代器..转载 2021-12-14 10:56:41 · 564 阅读 · 0 评论 -
STL源码——序列式容器vector★★★
一.vector概述任何特定的数据结构都是为了实现某种特定的算法.STL容器即是将运用最广的一些数据结构实现出来。vector的数据安排以及操作方式,与array非常相似。两者的唯一差别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加人,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于转载 2021-12-13 20:51:23 · 202 阅读 · 0 评论 -
STL源码——序列式容器list
一、list概述list的使用语法:https://blog.csdn.net/qq_41453285/article/details/105483054总的来说:环形双向链表特点:底层是使用链表实现的,支持双向顺序访问在list中任何位置进行插入和删除的速度都很快不支持随机访问,为了访问一个元素,必须遍历整个容器与其他容器相比,额外内存开销大设计目的:令容器在任何位置进行插入和删除都很快何时使用:容器需要不断地在中间插入或删除元素无论删除还是增加,list的迭代器、引用、指针都不会转载 2021-12-13 20:50:30 · 215 阅读 · 0 评论 -
STL源码——序列式容器deque
一、deque概述deque的使用语法:https://blog.csdn.net/qq_41453285/article/details/105483037总的来说:是一个双端队列特点:支持快速随机访问(支持索引取值)在头尾插入/删除速度很快deque是非常复杂的数据结构,由多个vector组成,迭代器使用时会在不同的区间跳转存取元素的时候,deque的内部结构会多出一个间接过程,相比vector操作会慢一些对内存有限制的系统中,deque比vector可以包含更多元素,因为它不止使用一转载 2021-12-13 20:49:54 · 345 阅读 · 0 评论 -
STL源码——序列式容器stack
一、stack概述stack的使用语法见文章:C++(标准库):21---STL容器之(容器适配器之stack)_董哥的黑板报-CSDN博客stack是一种先进后出(First In Last Out,FILO)的数据结构。它只有一个出口, 形式如下图所示特点:stack允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有任何其他方法可以存取stack的其他元素。换言之stack不允许有遍历行为将元素推入stack的动作称为push,将元素推出stack的动作称为pop底层实现:SG转载 2021-12-13 20:48:07 · 202 阅读 · 0 评论 -
STL源码——序列式容器queue源码剖析
一、queue概述queue的使用语法见文章:C++(标准库):22---STL容器之(容器适配器之queue)_董哥的黑板报-CSDN博客 queue是一种先进先出(First In First Out,FIFO)的数据结构。它有两个出口,形式如下图所示特点:queue允许新增元素、移除元素、从最底端加入元素、取得最顶端元素但除了最底端可以加入、最顶端可以取出外,没有任何其他方法可以存取queue的其他元素。换言之queue不允许有遍历行为将元素推入queue的动作称为push,将元素推转载 2021-12-13 20:47:34 · 399 阅读 · 0 评论 -
STL源码——heap算法
一、heap概述heap并不归属于 STL 容器组件binary heap作为priority queue的底层实现机制。顾名思义,priority queue允许使用者以任何次序将任何元素推入容器内,但取出时一定是从优先权最高(也就是数值最高)之元素开始取。binary max heap正是具有这样的特性,适合做为priorityqueue的底层机制heap作为priority queue的底层实现假设list作为priority queue的底层机制:元素插入动作可享常数时间但是要找到l转载 2021-12-13 20:47:04 · 1222 阅读 · 0 评论 -
STL源码——平衡二叉搜索树AVL-tree与RB-tree(红黑树)★★★
一、二叉搜索树所谓二叉搜索树,可提供对数时间的元素插入和访问 节点放置规则:任何节点的键值一定大于其左子树的每一个节点的键值;并小于其右子树中的每一个节点的键值最大值、最小值:最小值:从根节点出发,一直往左走,直至无左路可走,即得到最小元素最大值:从根节点出发,一直往右走,直至无右路可走,即得到最大元素二叉搜索树的查找从根节点出发,根据值的大小,逐个向左或向右查找,就可以查找到元素二叉搜索树的插入插入新元素时,从根节点开始,遇键值较大者就向左,遇键值较小者就向右,一直到.转载 2021-12-13 20:46:10 · 485 阅读 · 0 评论 -
STL源码——hash table(哈希表)与关联式容器hash_set、hash_map★★★
一、哈希介绍前面介绍的二叉搜索树和平衡二叉搜索树。二叉搜索树具有对数平均时间的表现,但这样的表现构造在一个假设上:输入数据有足够的随机性文本要介绍一种名为hash table(哈希表/散列表)的数据结构,这种结构在插入、删除、搜索等操作上也具有“常数平均时间”的表现,而且这种表现是以统计为基础,不需依赖输入元素的随机性哈希表可以在本人的数据结构文章中查看,文本就不再详细介绍了:hash table是作为hash_set、hash_map、hash_multiset、hash_multimap容器的底转载 2021-12-13 20:44:23 · 300 阅读 · 0 评论 -
C++代码优化,提升性能★★★
1.背景背景:部分代码中对于string字符串的添加采用+=方式,经测验,append方式执行效率更高。2.测验代码#include<iostream> #include<ctime> #include<map> using namespace std; int main() { for (int j = 0; j < 10; ++j) { string strinfo;原创 2021-12-13 20:41:52 · 4924 阅读 · 0 评论 -
为什么很多编程语言中数组都从0开始编号?
从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。前面也讲到,如果用 a 来表示数组的首地址,a[0] 就是偏移为 0 的位置,也就是首地址,a[k] 就表示偏移 k 个 type_size 的位置,所以计算 a[k] 的内存地址只需要用这个公式:a[k]_address = base_address + k * type_size但是,如果数组从 1 开始计数,那我们计算数组元素 a[k] 的内存地址就会变为:a[k]_address = base_addre原创 2021-12-13 20:39:57 · 130 阅读 · 0 评论 -
CMakeLists.txt编译C++
cmakelist 编写函数才把消息处理函数所返回的值返回给调用者。我们常见的方法的调用大部分是同步,在方法内部调用另外的方法,往往都是在等待方法的处理结果然后获取结果,接着进行后续的处理。在我们进行断点调试时,可以看出方法的执行就如流水一样,一句一句执行,一句未执行完毕就等待。我们将这种想法放到一些需要协同工作,或者需要花费函数才把消息处理函数所返回的值返回给调用者。我们常见的方法的调用大部分是同步,在方法内部调用另外的方法,往往都是在等待方法的处理结果然后获取结果,接着进行后续的转载 2021-12-11 12:32:37 · 1012 阅读 · 0 评论 -
C++编程规范
资源清理程序出错时需要对已分配的一些资源做清理,在传统的玩法下,每一步的错误都要去清理前面已分配好的资源。于是就出现了goto fail这样的错误处理模式。如下所示:#define FREE(p) if(p) { \ free(p); \ p = NULL; \ }main(){ char *fname=NULL, *lname=NULL, *mname=NULL; f...原创 2021-11-28 20:55:09 · 457 阅读 · 0 评论 -
STL系列等待搬运
STL系列等待搬运原创 2021-10-09 20:23:11 · 64 阅读 · 0 评论 -
智能指针__★★★
unique_ptrunique_ptr 是最简单、最容易使用的一个智能指针,在声明的时候必须用模板参数指定类型:unique_ptr<int> ptr1(new int(10)); // int智能指针assert(*ptr1 = 10); // 可以使用*取内容assert(ptr1 != nullptr); // 可以判断是否为空指针unique_ptr<string> ptr2(n转载 2021-09-14 09:41:15 · 282 阅读 · 0 评论 -
Lua
Lua接下来我要说的第二个脚本语言是小巧高效的 Lua,号称是“最快的脚本语言”。你可能对 Lua 不太了解,但你一定听说过《魔兽世界》《愤怒的小鸟》吧,它们就在内部大量使用了 Lua 来编写逻辑。在游戏开发领域,Lua 可以说是一种通用的工作语言。Lua 与其他语言最大的不同点在于它的设计目标:不追求“大而全”,而是“小而美”。Lua 自身只有很小的语言核心,能做的事情很少。但正是因为它小,才能够很容易地嵌入到其他语言里,为“宿主”添加脚本编程的能力,让“宿主”更容易扩展和定制。标准的 L原创 2021-09-13 20:38:01 · 2453 阅读 · 0 评论 -
ProtoBuffer
第三个要说的库就是著名的ProtoBuffer,通常简称为 PB,由 Google 出品。PB 也是一种二进制的数据格式,但毕竟是工业级产品,所以没有 JSON 和 MessagePack 那么“轻”,相关的东西比较多,要安装一个预处理器和开发库,编译时还要链接动态库(-lprotobuf):apt-get install protobuf-compilerapt-get install libprotobuf-devg++ protobuf.cpp -std=c++14 -lprotobu原创 2021-09-13 20:29:29 · 742 阅读 · 0 评论 -
自旋锁———
在项目起始阶段,应该认真做需求分析,然后应用设计模式和设计原则,得出灵活、可扩展的面向对象系统; C++ 项目里最好要有一个核心头文件(cpplang.hpp),集中定义所有标准头和语言特性,规范源文件里的 C++ 使用方式; 使用原子变量(atomic)可以实现自旋锁,比互斥量的成本要低,更高效; 使用 ZMQ 可以简化网络通信,但要注意它使用了异常来处理错误; 使用 Lua 脚本作为配置文件的好处很多,是“可编程的配置文件”; 在编写代码时要理解、用好 C++ 特性,恰当地使用 final、d原创 2021-09-13 17:23:52 · 81 阅读 · 0 评论 -
C++基础知识
decltypedecltype 的用途是获得一个表达式的类型,结果可以跟类型一样使用。它有两个基本用法:decltype(变量名) 可以获得变量的精确类型。decltype(表达式) (表达式不是变量名,但包括 decltype((变量名)) 的情况)可以获得表达式的引用类型;除非表达式的结果是个纯右值(prvalue),此时结果仍然是值类型。如果我们有 int a;,那么:decltype(a) 会获得 int(因为 a 是 int)。decltype((a)) 会获得 int&原创 2021-09-13 11:25:28 · 496 阅读 · 0 评论 -
《More Effective C++》29.引用计数
引用计数是这样一个技巧,它允许多个有相同值的对象共享这个值的实现。这个技巧有两个常用动机。第一个是简化跟踪堆中的对象的过程。一旦一个对象通过调用new被分配出来,最要紧的就是记录谁拥有这个对象,因为其所有者--并且只有其所有者--负责对这个对象调用delete。但是,所有权可以被从一个对象传递到另外一个对象(例如通过传递指针型参数),所以跟踪一个对象的所有权是很困难的。象auto_ptr(见Item M9)这样的类可以帮助我们,但经验显示大部分程序还不能正确地得到这样的类。引用计数可以免除跟踪对象所有权的担原创 2021-09-10 11:49:21 · 155 阅读 · 0 评论 -
Effective C++读书笔记
Effective C++读书笔记条款1:尽量用const和inline而不用#define1.为方便调试,最好使用常量注意:常量定义一般放在头文件中,可将指针和指针所指的类型都定义成const,如const char * const authorName = Scott Meyers;类中常量通常定义为静态成员, 而且需要先声明后定义可以在声明时或定义时赋值,也可使用借用enum的方法如enum{Num = 5};2.#define语句造成的问题如#define max(a, b...转载 2021-09-10 11:39:39 · 276 阅读 · 0 评论 -
《More Effective C++》08. 了解各种不同意义的new和delete
1.new operator:new操作符,用于动态分配内存并进行初始化;1)调用operator new 获得一块可用内存的地址 2) 调用constructor,为获得的内存中的对象设定初值(初始化对象)new operator是不能被重载的,无论怎样,它总进行这两个步骤。可以被重载的是operator new,即用来获取可用内存的函数,通过重载operator new可以简介优化new operator。string *ps = new string("hello worl...转载 2021-09-10 11:19:32 · 112 阅读 · 0 评论 -
More Effective C++读书笔记
条款1:指针与引用的区别二者之间的区别是:在任何情况下都不能用指向空值的引用,而指针则可以;指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变在以下情况下使用指针:一是存在不指向任何对象的可能性;二是需要能够在不同的时刻指向不同的对象在以下情况使用引用:总是指向一个对象且一旦指向一个对象之后就不会改变指向;重载某个操作符时,使用指针会造成语义误解条款2:尽量使用C++风格的类型转换static_cast:功能上基本上与C风格的类型转换一样强转载 2021-09-10 11:17:19 · 175 阅读 · 0 评论 -
良好的编程风格
Google开源项目风格指南 (中文版)空格与空行当我们拿到一份编码风格指南的时候,不论它是公司内部的还是外部的,通常第一感觉就是“头大”,几十个、上百个的条款罗列在一起,规则甚至细致到了标点符号,再配上干巴巴的说明和示例,不花个半天功夫是绝对看不完的。而且,最大的可能是半途而废,成了“从入门到放弃”。我写了很多年代码,也看过不少这样的文档,我从中总结出了一条最基本、最关键的规则,只要掌握了这条规则,就可以把你 code style 的“颜值”起码提高 80%。留白的艺术。再...原创 2021-09-01 10:31:50 · 2945 阅读 · 0 评论