c++
文章平均质量分 82
致守
这个作者很懒,什么都没留下…
展开
-
正则表达式(?=pattern) (?!pattern) (?:pattern)的理解
我们模拟下正则表达式的处理过程(当然,我暂时没有学习正则表达式引擎的原理,不确定是否就是完全正确的过程,但是有助于理解):引擎从左向右扫描,扫描到“ABCDEFG”中的CD时,第一次扫描到“CD”字符,然后执行环视,(?因为,扫描到“CD”后,引擎在环视的过程中并没有消耗后面的“EF”字符,引擎仍从上次扫描的位置接着扫描,显然“D”后面的字符不是“G”,因此匹配失败。理解环视不消耗字符很重要:引擎在扫描到“CD”后,执行环视,观察右边是否有“EF”字符,结果是观察到了,那么继续匹配后面的,转载 2024-08-14 19:46:19 · 20 阅读 · 0 评论 -
最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$转载 2024-08-14 16:14:52 · 25 阅读 · 0 评论 -
如何编写匹配浮点数的Python正则表达式?
在日常的工作中,经常需要从文本中匹配出浮点数,而正则表达式是一种非常强大的从文本中匹配特定模式的工具。本文将介绍如何编写匹配浮点数的Python正则表达式。转载 2024-08-14 14:25:41 · 21 阅读 · 0 评论 -
正则表达式 运算符优先级与匹配规则 | 一看就懂!!!(四)
开头 (^)、跟着1个或更多的数字([0-9]+)、和一个小数点(\.)再跟上1个或多个数字([0-9]+),并且后面没有其他任何东西($)。^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串。^[a-zA-Z0-9_]+$ // 所有包含一个以上的字母、数字或下划线的字符串。这个模式与 "&5"、"g7"及"-2" 是匹配的,但与 "12"、"66" 是不匹配的。[^\\\/\^] //除了(\)(/)(^)之外的所有字符。转载 2024-08-14 14:23:23 · 68 阅读 · 0 评论 -
C++中operator关键字(重载操作符)
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。这是C+ +扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。转载 2024-07-31 14:30:49 · 123 阅读 · 0 评论 -
黑马Jenkins教程笔记(一):介绍持续集成概念(Continuous integration,简称 CI)(持续集成三要素:自动构建、版本控制、持续集成服务器(引出Jenkins))
软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划、开发、测试和部署过程的集合。敏捷开发(Agile Development) 的核心是迭代开发(Iterative Development) 与 增量开发(Incremental Development)。持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。转载 2024-07-24 18:32:02 · 22 阅读 · 0 评论 -
基于C++实现的EventLoop与事件驱动编程
事件循环(Event Loop)是一个无限循环,它会不断地从事件队列中取出事件,并执行对应的回调函数。Event即事件,是事件驱动编程中的基本处理单元,可以理解为各种各样的信号,对于UI界面来说,鼠标点击、键盘输入、触摸屏输入都可以理解为事件。事件循环特别适用于异步编程,在事件循环中,程序会不断地等待事件的发生,并根据事件的类型和优先级来执行相应的处理逻辑。采用事件驱动编程的代码中,通常要有事件循环,侦听事件,以及不同事件所对应的回调函数。3.触发Event对应的请求以后,从队列中执行事件对应的回调函数。转载 2024-07-24 17:16:57 · 214 阅读 · 0 评论 -
【C++】浅论(cin和cout)的解锁、缓冲区的理解、C&C++输入方法汇总和详解
但是这种同步带来的代价是,在用户进行输入和输出时,这两个库之间会协调同一片共享缓冲区,保证程序能按顺序的执行,这种协调会导致资源的消耗。需要注意的是,假如缓冲区开头就是换行符(比如可能是上一次cin残留的),则getline()会直接读取到空字符串并结束,不会给键盘输入的机会。注意,%c是一个比较特殊的格式符号,它将会读取所有空白字符,包括缓冲区开头的空格、Tab、换行符,使用时要特别注意。是兼容了C语言的输入和输出,这意味着C++的IO标准库和C的IO标准库是同步的,这能保证可以在程序中混用。转载 2024-07-24 17:08:47 · 25 阅读 · 0 评论 -
关于C ++:使用std :: cin语句进行自动超时
我的代码有时会为我提供可用数据的肯定结果,但随后在std::cin.get();我希望std :: cin语句在10秒后超时(如果用户在10秒内未输入任何数据,则编译器将开始执行std :: cin语句下面的程序的下一条语句。我已经尝试了一些解决方案以使其正常工作,但是我当前的解决方案非常笨拙,但是,它适用于我这里使用select和poll的其他解决方案均失败的情况。这就是我落后的地方。请提出我的解决方案(即多线程)的答案。显然,此代码的适当性将取决于您项目的其余部分,但是它对我有用,所以我想与您分享。转载 2024-07-24 17:06:31 · 31 阅读 · 0 评论 -
逆袭?逆袭?
如果你能看到这里,确实很了不起。我罗里吧嗦说了一大堆,每个人的成功都是不可复制的,我也不敢说自己的经历或者学习过程一定就是正确的,但我确实是这样走过来的。我写下这篇文章的时候是2021年的五一期间了,距离那段时光已经快过去一年了,确实挺快的,还有一个多月自己就要毕业了,时间真的很快。有时候我就在想,“玩也一天,学也一天,为什么不试着学一下呢?万一你就成功了呢”我是小镇做题家长大的,我记的上大学第一天代班问我们有什么才艺。我惊奇的发现,我好像没什么才艺。但我想,我的孩子不会再像我这样了,我保证。转载 2024-07-24 17:02:57 · 41 阅读 · 0 评论 -
呕心沥血一个月,为小白新手准备的C/C++ Linux求职版学习路线
好的 C++开发者从来不怕找不到工作,即使你日后从事 Java/Go的工作,由于语言的原理都是相通的,所以你的学习成本会比别人小的多。我仔细想了想自己这些年的语言史:大学写了一年的C语言和VB,三年的C#;研究生写了一年的Python,两年的C++;工作了开始写JavaScript、Go以及Vue、React这些框架。你要问我最喜欢哪门语言?毫无疑问,绝对是是C++!不为什么,就是喜欢它的严谨!C++天下第一!!!种一棵树的最好时间是十年前,其次就是现在,转载 2024-07-24 17:00:39 · 69 阅读 · 0 评论 -
iostream 缓冲区详解(cin和cout)
比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。在我们不了解的时候,我们也许会疑惑,就算是一次输出五个,那也应该是只进入一次循环吧,为什么在我们调用单步调试的时候,其实际上却进入了五次循环,从上文中可以想到,上一次的输入操作可能会导致缓冲区中的数据堆积,影响下一次的输入。的时候,我们想要的也许是,输入一个处理一个。转载 2024-07-24 16:46:39 · 21 阅读 · 0 评论 -
拨开由问题《Linux下malloc最大可申请的内存》带来的重重疑云
468 {11i<3;i++) {;count++) {23 }242628 }1 NOTES371015182 0。转载 2024-07-22 19:53:31 · 27 阅读 · 0 评论 -
C/C++多个链接库含有同名函数,编译会报错吗
可见,在动态链接时,不同的链接库可以有同名函数,不影响编译。这是由动态链接库的性质决定的,其只有在运行时才会动态加载,并且加载的顺序是由编译时链接的顺序决定的。最简单的应用场景,比如某开源库中有个函数我不喜欢,我想写个自己的版本替换掉,那么完全可以利用上述的知识,将自己实现的某函数以动态或者静态的方式链接进可执行文件中,替换自己不喜欢的版本。由于业务需要,我司使用了Mellanox某闭源C++程序,Mellanox推荐的定制化开发方法是:对其链接的动态库进行定制化开发,以添加额外的功能。转载 2024-07-03 13:47:18 · 63 阅读 · 0 评论 -
2 STL迭代器介绍【前向迭代器、双向迭代器、随机访问迭代器】【迭代器遍历容器】
参考:http://c.biancheng.net/view/6675.html每一种容器都有对应类型的迭代器,也就是,不同容器的迭代器也不同,其功能强弱也有所不同。容器的迭代器的功能强弱,决定了该容器是否支持 STL 中的某种算法。转载 2024-07-01 16:26:31 · 42 阅读 · 0 评论 -
c++ - 为什么 std::find 是这样实现的?
关于c++ - 为什么 std::find 是这样实现的?我不知道为什么要这样做。但我认为这不会那么容易地利用多核。无论如何,这是在一个线程中。的源代码,发现它让我感到困惑。转载 2024-07-01 16:20:16 · 27 阅读 · 0 评论 -
红黑树红黑树
123456789101112131415// 排序函数// 节点结构体...// 根节点指针// 记录红黑树中当前的节点个数显示详细信息。转载 2024-06-29 22:43:09 · 27 阅读 · 0 评论 -
【数据结构】史上最好理解的红黑树讲解,让你彻底搞懂红黑树
目录一、红黑树简介二、为什么需要红黑树?三、红黑树的特性四、红黑树的效率4.1 红黑树效率4.2 红黑树和AVL树的比较五、红黑树的等价变换六、红黑树的操作6.1 旋转操作6.2 插入操作6.2.1 插入操作的所有情况6.2.2 LL和RR插入情况6.2.3 LR和RL插入情况6.2.4 上溢的LL插入情况6.2.5 上溢的RR插入情况6.2.6 上溢的LR插入情况6.2.7 上溢的RL插入情况6.2.8 插入情况总结6.3 删除转载 2024-06-29 22:36:35 · 123 阅读 · 0 评论 -
数据结构笔记五_树(c++超详细版)
树是n(n>0)个节点的有限集合T,并且满足:1)有一个被称为根(root)的节点2) 如果有其他节点,则可分为若干个互不相交的子集。每个子集又是一棵树,且称为根节点的子树。子树的根是树根的子节点。向上一一对应,向下一对多二叉树(Binary Tree)是节点的有限集合。与树不同,它在现实生活并没有很广泛的对应关系,偏向工具性。或者为空,或者由一个根节点及两棵互不相交的左、右子树构成,其左右子树又都是二叉树。注 意 \color{red}{注意} 注意:二叉树必须严格区分左右子树。转载 2024-06-29 22:34:35 · 16 阅读 · 0 评论 -
一.为什么要有红黑树这种数据结构?
我们知道ALV树是一种严格按照定义来实现的平衡二叉查找树,所以它查找的效率非常稳定,为O(log n),由于其严格按照左右子树高度差不大于1的规则,插入和删除操作中需要大量且复杂的操作来保持ALV树的平衡(左旋和右旋),因此ALV树适用于大量查询,少量插入和删除的场景中。2)按照红黑树的性质4我们知道红黑树中黑结点的个数至少是红结点个数的两倍,所以新增结点的父亲结点是黑结点的概率比较大,如果新增结点的父节点为黑色,那么此时不需要再去进行任何调整操作,因此效率很高,所以新结点应该涂成红色。转载 2024-06-29 22:29:05 · 17 阅读 · 0 评论 -
深入剖析STL中的RB-tree(红黑树),并封装set和map
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。每个节点不是红色就是黑色根节点为黑色不存在两个连续的红色节点任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同。转载 2024-06-29 22:23:01 · 33 阅读 · 0 评论 -
使用红黑树模拟实现map和set
因为map和set的底层都是红黑树。而且map是拥有键值对pair<K,V>的,而set是没有键值对,只有一个K。因此,为了应对这两种不同的情况,就使用模板参数T。当map使用这棵红黑树的时候,T就会变成pair<K,V>。当set使用时,T就会变成K。代码语言:javascript复制//使用枚举RED,BLACK,// 如果是map,则为pair<K, V>;如果是set,则为k//因此,对于节点来说,需要再套一层模板,来应付两种不同的情况T _data;转载 2024-06-29 22:20:45 · 10 阅读 · 0 评论 -
C++ STL advance()函数(深入了解,一文学会)
advance() 函数用于将迭代器前进(或者后退)指定长度的距离。其中 it 指的是目标迭代器,n 通常为一个整数。需要注意的是,如果 it 为输入迭代器或者前向迭代器,则 n 必须为一个正数,即表示将 it 右移(前进) n 个位置;反之,如果 it 为双向迭代器或者随机访问迭代器,则 n 为正数时表示将 it 右移(前进) n 个位置,n 为负数时表示将 it 左移(后退) n 个位置。本文作者原创,转载请附上文章出处与本文链接。转载 2024-06-18 18:55:46 · 202 阅读 · 0 评论 -
C++ STL reverse_iterator反向迭代器适配器(深入了解,一文学会)
反向迭代器适配器(reverse_iterator),可简称为反向迭代器或逆向迭代器,常用来对容器进行反向遍历,即从容器中存储的最后一个元素开始,一直遍历到第一个元素。值得一提的是,反向迭代器底层可以选用双向迭代器或者随机访问迭代器作为其基础迭代器。不仅如此,通过对 ++(递增)和 --(递减)本文作者原创,转载请附上文章出处与本文链接。转载 2024-06-07 15:49:46 · 83 阅读 · 0 评论 -
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); 的作用和注意事项
使用cin.tie(0)和cout.tie(0)可以取消cin与cout之间的绑定,这意味着在进行输入操作时,不需要强行刷新输出缓冲区。:如果你的程序在输入输出中同时使用了C++的输入输出流和C标准库的输入输出函数(如scanf和printf),则不应该使用这段代码。因为这会导致输入输出之间的不同步。这三行代码必须一起用,不能只用第一行代码,使用这三行代码时,得用C++的头文件。:在使用了这段代码后,应避免使用C标准库的输入输出函数(如printf和scanf),因为这些函数与输入输出流的同步已被关闭。转载 2024-05-31 17:03:59 · 387 阅读 · 1 评论 -
【STL】STL函数总结,助你代码实用高逼格
使用lambda表达式。转载 2024-05-31 17:00:25 · 47 阅读 · 0 评论 -
深入探索C++对象模型-1
在实际生产中,遇到一个复杂的类,如果能看出这个类的内存模型结构,那么以后的操作基本就没有难度的;所以说,学会分析一个类的内存模型,是每一个C++程序员必须要会的知识。下面,就让我们来了解C++对象模型!转载 2024-05-31 11:14:19 · 18 阅读 · 0 评论 -
STL之Iterator(迭代器)
对于前向迭代器,在访问迭代器指向的数据之前,必须确定该迭代器是否是正确的。这就是为什么上面的循环中的代码对前向迭代器是错误的。如果该迭代器指向的是NULL,那么在没有检查之前便去访问未知地址,会出现未定义行为。事实上,是不可以将一个输出迭代器和一个终端迭代器作比较的,因为输出迭代器没有对比的操作。前向迭代器是输入迭代器和输出迭代器的组合。它包含输入迭代器的所有功能和输出迭代器的大部分功能。几乎所有其他迭代器都有输入迭代器的功能。为什么前向迭代器只包含输出迭代器的大部分功能,而不是全部功能呢?转载 2024-05-31 11:13:24 · 21 阅读 · 0 评论 -
STL源码剖析 - 第4章 序列式容器 - vector
其中内存的配置是最重要的,因为每当配置内存空间时,可能会发生数据移动,回收旧的内存空间,如果不断地重复这些操作会降低操作效率,所有vector容器在分配内存时,并不是用户数据占多少就分配多少,它会分配一些内存空间留着备用,即是用户可用空间。关于vector类定义可参考。由于为了提高容器的访问效率,为用户分配内存空间时,会分配多余的备用空间,即容器的容量,以迭代器end_of_storage作为可用空间的尾,则容器的容量capacity()为[start,end_of_storage)范围的线性连续空间。转载 2024-05-30 18:06:59 · 30 阅读 · 0 评论 -
stl-vector源码注解
【代码】stl-vector源码注解。转载 2024-05-30 18:04:41 · 16 阅读 · 0 评论 -
trivial、standard layout、POD和literal类型解析
POD类是老版的C语言对类型的形容,实际上,它可以分为两个部分,trivial和standard layout,所以新的C++版本把POD进行了进一步细分,在C++20开始,废弃了。总结来说,如果一个类的上述四个函数都是编译器自动生成的,而且该类对应的基类和所有的成员都是trivial类型,且没有虚函数,则该类为trivial type。在layout部分里已经介绍过了,如果一个类是Standard Layout类,那么该类的对象在内存上的分配是连续的。单词layout用于表示class、struct或。转载 2024-05-30 16:44:36 · 25 阅读 · 0 评论 -
C++11 POD类型
(这两句话看着挺绕口,其实就是在说明一个事实,关于非静态数据的事实,派生类中有非静态的数据那么它的基类只能是只有静态的,而且基类只能有一个。默认的意思就是由编译器为我们自动生成的,不许是我们自己定义的,而一旦定义了构造函数,即使函数体里没有任何代码,那么该构造函数也不在是平凡的,但是由于c++11提供了default,也可以是自己定义的加=default。//有不平凡的构造函数。转载 2024-05-30 16:19:55 · 58 阅读 · 0 评论 -
深入理解Linux内存分配
为了写一个用户层程序,你也许会声明一个全局变量,这个全局变量可能是一个int类型也可能是一个数组,而声明之后你有可能会先初始化它,也有可能放在之后用到它的时候再初始化。除此之外,你有可能会选择在函数内部去声明局部变量,又或者为变量动态申请内存。不管你在用户程序中采取哪种方式申请内存,这些都对应着不同的内存分配方式以及不同的数据段,如果再加上代码段,就构成了一个完整的进程。由此可见,一个完整的进程在内存空间中对应着不同的数据区,具体来说,对应着五种不同的数据区:代码段,存放操作指令;数据段,存放已初始转载 2024-05-30 15:13:02 · 366 阅读 · 0 评论 -
周海汉:标准模板库stl 容器的线程安全
意思就是:设置/MT, /MTd, /MD, or /MDd 标志时,对vector, deque, list, queue, stack , priority_queue, valarray, map, multimap, set, multiset, basic_string, bitset容器,多线程读同一对象或同一个类的不同对象,没有写时,读安全。其线程安全和容器类似,也是可以同时读,同时写,但不能又读又写。不同线程同时读同一容器对象没关系,不同线程同时写不同的容器对象没关系。转载 2024-05-30 12:46:53 · 43 阅读 · 0 评论 -
C++随机数 rand Vs mt19937
众所周知,程序无法模拟出真正的随机数,所以我们所说的随机数都是相对随机的伪随机数。rand 是一种常用的随机数,C++ 初学者一般接触的都是他,但是他有缺点,随机性不高,周期短,质量低。Mt19937 用法与 rand 一样但是他随机性高,周期长,质量高。先放上进行实验对比的两个代码:我们通过多次随机数(0 到 100 的范围内随机)。rand 随机数sum += tmp;mt19937 随机数sum += tmp;我们对两个代码进行了 107 次随机数。转载 2024-05-22 15:02:15 · 73 阅读 · 0 评论 -
漫谈随机:如何均匀生成随机数
每次生成随机数都需要消耗“熵池”中的熵,速度较慢,且当墒池中的墒耗尽时可能发生阻塞,所以不适合用于快速生成伪随机数序列,而适合用于作为伪随机数生成器的种子。比如,随机生成数字 0 的情况有 22 种可能;,具体实现与平台有关。在 Linux 上,比较简单的实现是可以从。(Mersenne Twister)算法的伪随机数生成器,可以。用于均匀地生成某个范围内的随机整数。但是很可惜,这样子做是不对的。,修正了古典随机数发生算法的很多缺陷。总的来说,无论是性能还是随机数的质量,用于生成某个范围内的随机浮点数。转载 2024-05-22 15:00:45 · 55 阅读 · 0 评论 -
STL库rebind原理详解
我最近发现国内中文网站上对于的一些魔法基本未做任何介绍,基本上都是不知所云的一概而过。因此接下来详细分析一些比较复杂的STL代码,本篇文章分析rebind,所有代码均摘自。转载 2024-05-21 17:46:17 · 33 阅读 · 0 评论 -
operator++(int) 与 operator ++ 两者区别详解
可以发现对iterator来说,iterator++或者iterator–都有一次构造函数,且实际调用的是++iterator和–iterator来处理,效率低下,上面测试程序的写法参考了标准库的程序,下面代码来自stl源码 stl_list.h 中iterator相关的运算符重载。所以我们使用迭代器来说,尽量使用++iterator和–iterator操作。转载 2024-05-21 14:08:29 · 71 阅读 · 0 评论 -
operator++()实现:前置++和后置++
【代码】operator++()实现:前置++和后置++转载 2024-05-21 14:07:19 · 90 阅读 · 0 评论 -
【C++】 运算符重载
概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。转载 2024-05-21 14:06:24 · 68 阅读 · 0 评论