- 博客(46)
- 收藏
- 关注
原创 C++进阶:C++11
在2003年C++标准委员会曾经提交了一份技术勘误表简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。
2024-06-03 20:17:35 1104
原创 C++进阶:哈希表封装unordered_map和unordered_set(模拟实现)
基于my_unordered_map.h封装的哈希表类提供的接口,实现一个unordered_map。unordered_map的值是一个键值对。基于HashTable.h封装的哈希表类提供的接口,实现一个unordered_set类。该文件基本实现了unordered_set类。该文件基本实现了unordered_map类。
2024-06-03 19:02:35 378
原创 C++进阶:哈希
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log_2N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对和进行介绍,和可查看文档介绍。是存储键值对的关联式容器,其允许通过keys。
2024-06-03 17:53:57 676
原创 QT:信号与槽
1.信号和槽概述1.信号和槽概述在 Qt 中,⽤⼾和控件的每次交互过程称为⼀个事件。⽐如 "⽤⼾点击按钮" 是⼀个事件,"⽤⼾关闭窗⼝" 也是⼀个事件。,例如⽤⼾点击按钮会发出 "按钮被点击" 的信号,⽤⼾关闭窗⼝会发出 "窗⼝被关闭" 的信号。Qt 中的所有控件都具有接收信号的能⼒,⼀个控件还可以接收多个不同的信号。对于接收到的每个信号,控件都会做出相应的响应动作。例如,按钮所在的窗⼝接收到 "按钮被点击" 的信号后,会做出 "关闭⾃⼰" 的响应动作;
2024-05-26 22:18:12 955 1
原创 Qt 概述
Qt 背景介绍Qt 背景介绍什么是 QtQt 是⼀个 跨平台的 C++。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全⾯向对象的,很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模式,开发者可以通过简单的拖拽和组合来实现复杂的应⽤程序,同时也可以使⽤ C++ 语⾔进⾏⾼级开发。图形⽤⼾界⾯ :指采⽤图形⽅式显⽰的计算机操作⽤⼾界⾯,是计算机与其使⽤者之间的对话接⼝,是计算机系统的重要组成部分。如:Android ⼿机图形⽤⼾界⾯ 和 IOS ⼿机图形⽤⼾界⾯。
2024-05-26 21:58:52 1182
原创 C++进阶:红黑树
/节点的颜色enumColorREDBLACK//红黑树节点的定义templateclassValueTypestructRBTreeNodeRBTreeNodeconstValueTypedataValueType()RED_pLeftnullptr),_pRightnullptr),_pParentnullptr_datadata),_colorcolor{}RBTreeNodeValueType>*_pLeft;//
2024-05-12 21:08:19 771
原创 C++进阶:AVL树
AVL树节点的定义:(三叉链)templateclassTstructconstTdata_leftnullptr),_rightnullptr),_parentnullptr_datadata),_bf0{}T>*_left;//该节点的左孩子T>*_right;//该节点的右孩子T>*_parent;//该节点的双亲T _data;int_bf;//该节点的平衡因子。
2024-05-05 21:32:06 689
原创 C++进阶:二叉树进阶
二叉树在前面C数据结构阶段已经讲过,本节取名二叉树进阶是因为:1.先铺垫二叉搜索树,而二叉搜索树也是一种树形结构2.3.因此本节借二叉树搜索树,对二叉树部分进行收尾总结。,或者是具有以下性质的二叉树。
2024-04-28 11:03:34 439
原创 初识C语言
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制。
2024-04-24 15:06:38 1007
原创 数据结构初阶:二叉树(二)
由于现在对二叉树结构掌握还不够深入,为了降低学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。遍历是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。从概念中可以看出,二叉树定义是递归式的,因此后面基本操作中基本都是按照该概念实现的。学习二叉树结构,最简单的方式就是遍历。访问根结点的操作发生在遍历其左右子树之前。
2024-04-14 15:57:53 437 1
原创 数据结构初阶:栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出LIFO)的原则。压栈:栈的插入操作叫做进栈压栈入栈,。出栈:栈的删除操作叫做出栈。。
2024-04-07 14:43:51 279
原创 数据结构初阶:顺序表和链表
线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。与数组的区别:特点:只能从头开始连续存储。
2024-04-02 12:46:32 576
原创 C++初阶:list类及模拟实现
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与非常相似:最主要的不同在于是单链表,只能朝前迭代,已让其更简单高效。4.与其他的序列式容器相比(arrayvectordeque)list通常在任意位置进行插入、移除元素的执行效率更好。5.与其他序列式容器相比,list和。
2024-04-02 10:15:57 622
原创 C++初阶:模拟实现vector类
既高效又不会出错,但如果拷贝的是自定义类型元素,并且自定义类型元素中涉及到资源管理时,就会出错,因为memcpy。是内存的二进制格式拷贝,将一段内存空间中内容原封不动的拷贝到另外一段内存空间中。构建动态二维数组时与上图实际是一致的。实现代码+测试样例:vector.h。进行的拷贝,以下代码会发生什么问题?类型的,每行没有包含任何元素,如果n。如果拷贝的是自定义类型的元素,实现代码:vector.h。的拷贝实际是浅拷贝。个元素,每个元素都是。
2024-03-29 19:57:20 492
原创 数据结构初阶:算法的时间复杂度和空间复杂度
它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。一个算法所花费的时间与其中语句的执行次数成正比例,在计算机发展的早期,计算机的存储容量很小。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。之间的数学表达式,就是算出了该算法的时间复杂度。,则去除与这个项目相乘的常数。
2024-03-28 21:45:50 769
原创 数据结构初阶:排序
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将。:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。:数据元素全部放在内存中的排序。插入,原来位置上的元素顺序后移。之前,而在排序后的序列中,
2024-03-27 22:00:58 383
原创 Linux:基础IO
openman openpathname: 要打开或创建的目标文件flags : 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。参数 :O_RDONLY: 只读打开O_WRONLY : 只写打开O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND : 追加写。
2024-03-27 14:54:41 424
原创 Linux:进程控制
在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:自进程中返回0,父进程返回子进程id,出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork返回,开始调度器调度当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。
2024-03-24 16:56:07 876
原创 Linux:进程概念
PCB指的是进程控制块(Process Control Block),也称为进程描述符(Process Descriptor),是操作系统中用于管理和维护进程信息的数据结构。通过 PCB,操作系统可以实现进程的创建、调度、切换、挂起、终止等操作,并确保进程之间的安全隔离和资源分配。子进程是父进程的副本,它从父进程那里继承了大部分状态,包括打开的文件描述符、信号处理器等。fork()函数返回两次,成功时,在父进程中返回子进程的进程ID(PID),在子进程中返回0。描述本进程的唯一标示符,用来区别其他进程。
2024-03-21 19:00:45 832
原创 C++初阶:vector类
就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector。会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
2024-03-20 12:48:14 370 1
原创 C++初阶:string类
类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string。系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP。结尾的一些字符的集合,为了操作方便,己管理,稍不留神可能还会越界访问。的思想,而且底层空间需要用户自。中,有关字符串的题目基本以。库中的字符串操作函数。
2024-03-16 12:11:03 501 1
原创 C++初阶:模板初阶+STL简介
大家都知道,瓦特改良蒸汽机,人类开始了工业革命,解放了生产力。本质是什么,重复的工作交给了机器去完成。有人给出了论调:懒人创造世界。重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。,那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。代码的可维护性比较低,一个出错可能所有的重载均出错。如何实现一个通用的交换函数呢?,对于字符类型也是如此。,对于模板函数的使用,
2024-03-15 22:17:39 446 1
原创 C++初阶:C/C++内存管理
strlen是一个函数,用于计算以 null 结尾的字符串的长度(不包括 null 终止符)。- sizeof是一个运算符,而不是函数,用于计算数据类型或变量所占用的内存字节数。- sizeof在编译时求值,不会执行运行时计算,因此在编译时就能确定结果。- strlen主要用于获取以 null 结尾的字符串的长度,在运行时计算。- strlen 是在运行时执行的,需要遍历整个字符串来计算长度。- sizeof主要用于获取数据类型或变量的字节大小,在编译时确定。映射方式,用于装载一个共享的动态内存库。
2024-03-15 17:17:09 898 1
原创 C++初阶:类和对象(下)
虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量。尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。非静态成员函数可以调用类的静态成员函数吗?静态成员函数可以调用非静态成员函数吗?,不属于某个具体的对象,存放在静态区。构造函数不仅可以构造与初始化对象,,与其在初始化列表中的先后。每个成员变量在初始化列表中。静态成员也是类的成员,受。就是其在初始化列表中的。
2024-03-14 20:23:26 456 1
原创 C++初阶:类和对象(中)
class Dateprivate:// 基本类型(内置类型)// 自定义类型Time _t;return 0;// 程序运行结束后输出:~Time()6.如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。class Date。
2024-03-12 22:39:39 1018 1
原创 Linux:基础开发工具使用
安装完毕之后可以通过拖拽的方式将文件上传过去。例如:yum list | grep xxx。例如:ping www.baidu.com。安装软件时由于需要向系统目录中写入内容。命令可以罗列出当前一共有哪些软件包。我们可以通过很简单的一条命令完成。会自动找到都有哪些软件包需要下载。安装软件只能一个装完了再装另一个。命令只筛选出我们关注的包.安装另外一个软件, yum。由于包的数目可能非常之多。的所有操作必须保证主机。安装一个软件的过程中。
2024-03-04 20:28:55 377
原创 Linux:权限的概念
因为拥有者跟所属组确定了,所有其他人就是others。下有两种用户(具体的人):超级用户(下有两种用户(具体的人):超级用户(su user,且不用输入密码。,普通用户的命令提示符是"$"。可以省略),此时系统会提示输入。系统下做任何事情,不受限制。(中国平民 法律问题)超级用户的命令提示符是。ctrl+d:退出登录。用户,不过路径会改变。
2024-03-03 14:52:15 385
原创 Linux:基本指令
查看我们当前在Linux系统中所处的路径。/:是Linux的路径分隔符\:是windows的路径分隔符目录就是文件夹两个路径分隔符之间,一定是一个“文件夹”(目录)路径最末端,一定是一个普通文件或者文件夹。
2024-02-28 21:10:51 396
原创 C++初阶:类和对象(上)
分析出求解问题的步骤,通过函数调用逐步解决问题。,将一件事情拆分成不同的对象,靠对象之间的交互完。,当对象调用成员函数时,将对象地址作为实参传递给。声明和定义全部放在类体中,需注意:成员函数如果。如果后面没有访问限定符,作用域就到。修饰的成员在类外可以直接被访问。修饰的成员在类外不能直接被访问。一个类可以实例化出多个对象,文件中,成员函数定义放在。,编译器可能会将其当成。,即成员函数中,不能给。语言中实现封装,可以。
2024-02-18 18:49:31 873 1
原创 (C语言)预处理
例如:注意:在define定义标识符的时候,不要在最后加上 ; 否则容易导致语法问题。二.#define 定义宏 #define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义 宏(define macro)。下面是宏的申明方式: #define name( parament-list ) stuff 其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。注意: 参数列表的左括号必须与name紧
2023-10-17 21:56:31 31 1
原创 C语言文件操作
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。1.1程序文件包括源程序文件(后缀为.c目标文件(windows环境后缀为.obj可执行程序(windows环境后缀为.exe。
2023-10-11 22:20:45 34
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人