- 博客(19)
- 收藏
- 关注
原创 c++ STL有序关联容器-----------set/multiset
set是关联容器,存储唯一的元素,并且元素自动升序排序multiset:关键字可以重复的set关联容器与map的区别:set只含元素的键(key)类型,而不包含值(value)类型,底层都是红黑树,能在插入元素时自动调整二叉树的排序,确保每个元素被放在合适的位置,同时保持树的高度最小化,从而实现快速检索(操作的时间复杂度为每个元素唯一,如果插入已存在的元素,该操作会自动被忽略(自动去重)按键值默认升序排列。
2025-09-02 10:33:12
544
原创 C++ STL序列容器-------list
1、list是序列容器,允许在序列中的任何位置执行o(1)时间的插入和删除操作,并且可以在两个方向上进行迭代2、list的底层是带头结点的双向循环链表,每个节点通过next,prev指针连接成顺序表3、与其他的序列式容器相比(array、vector、deque),list通常在任意位置的插入、删除元素的执行效率更高(直接插入、删除一个节点,再用指针连接,不存在数据的移动)。但list和forward_list最大的缺陷是不支持随机存取(因为他的迭代器是双向迭代器,而vector的是随机迭代器)
2025-09-01 17:36:37
805
原创 C++ STL 有序关联容器--------map/multimap
std::map是STL的一个关联容器,提供一对一的戴护具处理能力,即每个键值(key)在map中只能出现一次,每个键值可以关联一个值(value),形成键值对的形式。(1)、map 中所有元素都是pairpair 中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序(一般是升序)(2)、 本质:map/multimap 属于关联式容器,底层是用二叉树实现的(3)、 优点:可以根据key值快速找到value值。
2025-08-25 20:46:27
997
原创 C++ STL 顺序容器---------deque
/ 空deque// 3个默认值元素0 0 0// 初始化列表//同上// 拷贝构造1 2 3 4 5//移动构造 dq2移动给dq6,dq2为空//迭代器初始化。
2025-08-24 16:50:15
984
原创 C ++ STL 顺序容器-------vector
1. vector是表示可变大小数组的序列容器。2. 像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像静态数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小需要增加相应的存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。
2025-08-23 20:03:07
604
原创 C++ enum 和 enum class
enum:无法进行前置声明 原因:枚举的底层类型是隐式确定的,必须通过枚举值才知道枚举的类型,所以声明和定义在一起,C++ 98不能声明时指定类型,C++ 11后可以手动指定底层的类型从而支持前置声明。enum: 不安全,可以隐式转换,可能导致意外结果 (如传参错误,不同类型的枚举比较,算术运算)enum class可以前置声名,类型默认为int ,无需自己指定底层类型。enum class: 提供强类型安全,防止意外的隐式转化。enum class : 提供默认的底层类型,之前前置声明。
2025-07-05 15:22:25
347
原创 C ++四种类型转换
在C语言中,如果左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。
2025-06-01 22:47:00
1118
原创 C++三大特性之-----多态
(1)定义多态性是面向对象编程的一个重要特性之一,它允许我们使用统一的接口来处理不同类型的对象。多态性使得程序更加灵活、可扩展并且易于维护。不同的对象调用相同的函数时,会产生出不同的状态。(2)类型编译时多态(静态多态):传不同类型的参数。
2025-05-26 21:23:57
1101
原创 C++ 面向对象三大特性 之-----封装和继承
把属性(数据)和 方法(函数)捆绑在一起,并隐藏对象内部实现细节的机制。通过封装,可以保护数据不被外部随意访问和修改,从而提高代码的安全性和可维护性。C++通过类派生的机制支持继承,被继承的类称为基类 或 超类 新产生的类称为派生类 或 子类class 派生类名 :访问限定符 基类名private:成员列表;public:成员列表;protected:成员列表;
2025-05-20 21:49:33
908
原创 基于Linux系统的shell脚本
shell 是一种脚本语言 也是应用程序脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)常见的命令解释器**** 此处区分 解释型代码 命令型代码解释型:运行代码需要解释器,运行效率低,开发效率高 如: .sh结尾的shell脚本 .py结尾的 python脚本命令型:需要编译链接,直接计算机运行,运行效率高,开发效率低 如: .c .cpp。
2025-05-13 23:48:48
1035
原创 C++ lambda 表达式
概述:Lambda表达式是 c++11 引入的一个语法糖,来源于的概念(本质可以理解为函数)。它可以用来定义并创建匿名的函数对象,主要用于方便编程,避免全局变量的定义,并且变量安全。Lambda表达式的语法类似于一个函数定义,但它不需要函数名,可以直接定义并使用。Lambda表达式相比于普通函数和普通类,有以下几个优点:简洁、灵活和安全。Lambda表达式本质上是一个匿名类的对象,因此它可以赋值给一个函数指针或函数引用,也可以作为模板参数传递给一个泛型函数或类。
2025-05-07 20:30:02
1314
原创 C++ 静态static
声名时加上static关键字,定义时不用加static5. 无this指针,可以对其值进行修改6.不可通过构造函数初始化静态成员7. 若是私有,只能在类的成员函数中访问若是公有,类内类外皆可访问,类外访问加上。
2025-04-10 10:00:52
709
原创 c++ 移动构造函数,移动赋值函数
move函数本质是可将一个左值转化为右值,或将一个右值转化为左值与强转函数类似但是,move函数无法消除const,即move无法对一个常性左值,或常性右值 ,进行类型转换给出示例:构建一个Int类,此处仅展示main函数部分。
2025-03-13 15:43:19
613
原创 c++中= 、+ 、前置++、后置++、输出<< 、输入>>运算符重载
C++ 的 +、-、*、/ 等运算符只能用于对基本类型的常量或变量进行运算,不能用于对象之间的运算。利用 C++ 提供的“运算符重载”,赋予运算符新的功能,就能解决用+将两个对象相加这样的问题运算符重载基本格式:返回值类型 operator 运算符(形参表)...
2025-03-06 19:53:14
590
原创 C++拷贝构造函数
同一个类的对象在内存空间中具有完全相同的结构,可进行一个整体进行复制或拷贝,拷贝过程只需拷贝数据成员,成员函数是共用的。那么在调用拷贝构造函数时,会再次调用拷贝构造函数来复制参数,从而导致无限递归调用(程序进入调用拷贝构造函数的死循环)建立对象时,用同一个类的另一个对象来初始化该对象的存储空间,称之为~(3)构建一个对象的亡值(函数返回值是对象)3、为什么拷贝构造函数的参数是常性引用。(2)将一个对象作为实参传递给函数形参。类名(const 类名 & )(1)一个对象初始化另一个对象。
2025-03-06 14:48:41
303
原创 区分C语言中strlen和sizeof
(1)求字符串长度的库函数,需引用头文件#include<string.h>,只针对字符串,不能求其他类型变量的长度。(2)以字节为单位,只管组占用内存空间大小,不关注存放的具体内容,因此sizeof计算包括"\0"(3)只关注内存中是否有"\0",如果没有,会一直持续往后找,注意越界。(1)是一个单目操作符,不是函数,类型是unsigned int。(2)遇到"\0"就结束,求取长度不包括"\0"(3)参数可以是数组,指针,类型,对象,函数等等。1、用sizeof计算常用数据类型的大小。
2024-10-09 20:48:10
308
1
原创 指针(C语言版)
分析:p+1为数组结尾的地址,(int*)(p+1)将该指针强转为指向int*的指针,使指针偏移量发生改变,由12个字节转变为4个字节,则(int*)(p+1)-1的地址为[2]结尾的地址,故*((int*)(p+1)-1)的访问值为3。例如,如果一个指针指向一个整型变量,p+1后指向的地址由原来变量的地址向高地址方向增加了4个字节。我们将内存中字节的编号称为指针,每个编号是唯一的,根据编号可以找到对应的地址,所以提到指针,将其通俗理解为地址。eg:分析*((int*)(p+1)-1)的访问值。
2024-04-13 00:34:16
458
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅