- 博客(30)
- 收藏
- 关注
原创 C++:map和set
• set的声明如下,T就是set底层关键字的类型• set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模 版参数• set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。• ⼀般情况下,我们都不需要传后两个模版参数。• set底层是⽤红⿊树实现,增删查效率是 ,迭代器遍历是⾛的搜索树的中序,所以是有序 的。O(logN)
2025-07-29 12:27:22
857
原创 C++:二叉搜索树
⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树:• 若它的左⼦树不为空,则• 若它的右⼦树不为空,则• 它的• ⼆叉搜索树中可以⽀持插⼊相等的值,也可以不⽀持插⼊相等的值,具体看使⽤场景定义,后续我 们学习map/set/multimap/multiset系列容器底层就是⼆叉搜索树,其中map/set不⽀持插⼊相等 值,multimap/multiset⽀持插⼊相等值相等的值可能在左子树也可能在右子树,那么相等值会不会有什么排列的规则呢?要根据后面所讲的定义。
2025-07-26 11:48:26
897
原创 C++:多态
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票。
2025-07-24 12:37:12
555
原创 C++:继承
下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以 既叫基类/派⽣类,也叫⽗类/⼦类)三种继承方式和三种访问限定符,组合起来就有九种情况。1,基类private成员在派⽣类中⽆论以什么⽅式继承都是不可⻅的。这⾥的不可⻅是指基类的私有成员 还是被继承到了派⽣类对象中,但是语法上限制派⽣类对象不管在类⾥⾯还是类外⾯都不能去访问 它。2. 基类private成员在派⽣类中是不能被访问,
2025-07-23 11:43:50
779
原创 C++:模板进阶
优点:1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性缺陷:1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2025-07-22 11:11:10
1014
原创 C++:stack和queue
其中deque是双端队列,后面会解释。queue中container也是一种容器适配器。基本定义:// T 为元素类型模板参数:template <class T,
2025-07-21 16:55:22
619
原创 数据结构:顺序表和链表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的 数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的,线性 表在物理上存储时,通常以数组和链式结构的形式存储。逻辑结构:一定是线性的物理结构:不一定是线性的。
2025-07-18 20:40:24
932
原创 C++:list
(1)list是 C++ 标准模板库 (STL) 中的一个双向链表容器。它允许在常数时间内进行任意位置的插入和删除操作,但不支持随机访问。(2)list容器的底层数据结构为带头双向循环链表,list的元素可以存储在非相邻的内存中,所以list在插入和删除元素中有着独特的优势,其时间复杂度仅为常数。注意:list还需要额外的存储空间来存储前一个元素和后一个元素头文件:2,list的特点优点:(1)list在插入和删除操作过程中不会使得迭代器失效,仍旧可以对迭代器遍历和操作。(2)list可以动态的存
2025-07-17 16:36:37
983
原创 C++:Vector
vector本质是类模板,可以存储任何类型数据。与数组不同的是数组需要声明的时候加上数据类型,而vector是通过·模板参量设定类型的<>中为模板参数,其中class Alloc=allocator<T>是内存池template<class T,//元素类型class Allocator =std::allocator<T>//内存分配器接口说明。
2025-07-16 15:38:34
1182
原创 C++:STL和string
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的 组件库,而且是一个包罗数据结构与算法的软件框架。
2025-07-08 10:29:07
847
原创 数据结构:算法复杂度
数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤,所以我们要学各式各样的数据结构, 如:线性表、树、图、哈希等相关C语言知识:结构体,指针,内存动态申请,函数栈帧的创建与销毁。
2025-07-04 16:32:05
775
原创 C++:模板初阶
class 类模板名// 类内成员定义原先用typedef+类型+类型名也可以,但是也解决不了一些问题,比如同一份代码存储两个不同类型的栈,此时只能不断复制更改类型,这时就需要模板解决这类问题。// 类模版public://用new比malloc更加简单一点_size = 0;//前面加上const可以变成不可修改的private:T* _array;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;
2025-05-18 09:14:16
860
原创 C语言:预处理详解
define机制包括了⼀个规定,允许把参数替换到⽂本中,这种实现通常称为宏(macro)或定义宏 (define macro)。其中的 parament-list 是⼀个由逗号隔开的符号表,它们可能出现在stuff中。注意:参数列表的左括号必须与name紧邻,如果两者之间有任何空⽩存在,参数列表就会被解释为stuff的 ⼀部分。这个宏接收⼀个参数 x .如果在上述声明之后,你把 SQUARE( 5 );置于程序中,预处理器就会⽤ 下⾯这个表达式替换上⾯的表达式: 5 * 5其实就是一种替换。
2025-05-17 19:31:24
612
原创 C语言:编译和链接
在ANSI C的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。
2025-05-17 16:15:17
963
原创 C++:内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;
2025-05-17 10:42:50
665
原创 C语言:文件操作
磁盘(硬盘 如C盘,D盘等)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类 的)。return 1;//读文件//关闭文件fclose(pf);pf = NULL;return 0;
2025-05-11 21:34:09
849
原创 C++:类和对象4
(3)内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考 虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其 他地⽅都⽤不了。思路:通过Solution成员函数构建对象,从而去调用Sum类域中的构造函数,构造对象大小有多大就调用多少次,并且是静态成员变量,所以全局调用,每次使用的ret和i都是上次变化后的,来实现求和。(1)如果⼀个类定义在另⼀个类的内部,这个内部类就叫做内部类。
2025-05-11 14:43:10
917
原创 C语言:自定义类型 联合和枚举
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。。给联合体其中⼀个成员赋值,其他成员的值也跟着变化。联合体关键字:union结构体关键字:struct。
2025-05-03 16:50:15
855
原创 C语言:自定义类型,结构体与位段
结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。位段中的位是二进制位。位段的声明和结构是类似的,有两个不同:1,位段的成员必须是 int 、 unsigned int 或 signed int ,在C99中位段成员的类型也可以 选择其他类型。2,位段的成员名后边有⼀个冒号和⼀个数字。int _b:5;int _c:10;int _d:30;A就是⼀个位段类型。那位段A所占内存的⼤⼩是多少?
2025-05-03 12:05:17
721
原创 C语言:数据在内存中的存储
(1)有符号的整数,三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表 ⽰“负”,最⾼位的⼀位是被当做符号位,剩余的都是数值位。(2)正整数的原、反、补码都相同。负整数的三种表⽰⽅法各不相同。(3)原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。补码:反码+1就得到补码。补码得到原码也是可以使⽤:取反,+1的操作。
2025-05-02 21:22:42
734
原创 C语言:内存函数
介绍:函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。这个函数在遇到 '\0' 的时候并不会停下来。如果source和destination有任何的重叠,复制的结果都是未定义的。·对于重叠的内存,交给memmove来处理。注意:1,memcpy为内存拷贝函数,不在乎内存中储存的是什么类型的数据2,memcpy不支持拷贝内存有重叠的函数3,void*指针是无法被解引用的,强转时会因为数据类型所对应的字节数的差异发生错误。
2025-05-02 17:41:48
344
原创 SPSS(1):数据
1,定义变量就是建立spss文件的数据视图2,定义变量操作位于数据编辑器窗口的“变量视图”3,对变量的定义包含11个内容:名称,类型,宽度,小数,标签,值,缺失,列,对齐,度量标准和角色名称:变量名,变量访问和分析的唯一标识,首字符应当以英文字母开头,一些特殊符号不能使用类型:共九种,基本变量类型为三种:数值型,字符串型和日期型 相应的类型有默认的列宽和小数位宽,也可由用户设置。宽度:针对数值型变量,不同变量类型有默认的小数位宽,也可由用户设置。
2025-04-29 09:12:08
1101
原创 C++:类和对象1
(1)class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或 者成员函数。C中数据和声明分离,且C中要将名字区分C++中放到一个Stack,直接放到一个类域中C++中不同类域可以使用同一个函数名C中喜欢称作变量,C++喜欢称作对象public:// 成员函数perror("malloc申请空间失败");return;top = 0;// ...扩容。
2025-04-26 20:32:54
1061
原创 C语言:字符函数和字符串函数
C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是ctype.h。
2025-04-20 22:03:51
574
原创 C语言:函数栈帧
栈的理解:栈(stack)是现代计算机程序里最为重要的概念之一,几乎每一个程序都使用了栈,没有栈就没有函 数,没有局部变量,也就没有我们如今看到的所有的计算机语言。在经典的计算机科学中,栈被定义为一种特殊的容器,用户可以将数据压入栈中(入栈,push),也可 以将已经压入栈中的数据弹出(出栈,pop),但是栈这个容器必须遵守一条规则:先入栈的数据后出 栈就像叠成一叠的术,先叠上去的书在最下面,因此要最后才能取出。在计算机系统中,栈则是一个具有以上属性的动态内存区域。
2025-04-20 15:48:22
1358
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人