海上月是天上月,眼前人是心上人。
随笔分类 - C++
摘要:Lambda表达式 Lambda表达式是C++ 11 引入的一种匿名函数的方式,它允许你在需要函数的地方内联地定义函数,而无需单独命名函数,常用于简化代码、实现回调函数或配合 STL 算法使用。 基本语法结构 Lambda表达式的基本语法如下: [捕获列表](参数列表) -> 返回类型{ // 函数
阅读全文
摘要:元组 boost::tuple是Boost库中提供的允许程序员创建固定大小的元组,这些元组可以包含不同类型的元素。元组是一个数据结构,它可以存储多个值,这些值可以是不同类型的。boost::tuple是C++标准库中std::tuple的前身,后者在C++11标准中被引入。 特点 固定大小:一旦创建
阅读全文
摘要:枚举 在C++中,枚举(Enumeration)是一种用户定义的数据类型,它由一组命名的整数常量组成。枚举在C++中有几种不同的形式。 传统枚举(Unscoped Enum) 传统枚举(也称为未作用域枚举)定义如下: enum Color { RED, GREEN, BLUE }; 上述例子中,Co
阅读全文
摘要:Boost库 Bimap容器 概述 Bimap是Boost库中提供的一种双向映射(bi-directional map)数据结构。在C++标准库中,std::map或std::unordered_map只允许通过键来查找值,而boost::bimap允许同时通过键和值来查找对应的元素。 特点 双向映
阅读全文
摘要:删除字符串中的所有空格与换行 使用头文件中的remove函数,注意:std::remove 不会改变容器的大小,它只是将元素移动到容器的末尾。因此,我们需要调用 erase 来实际从字符串中删除这些元素。 使用 std::remove 算法,它重排元素,使得要删除的元素(在这里是空格和换行符)被放在
阅读全文
摘要:DLL介绍 DLL(动态链接库,Dynamic Link Library)是一种可执行文件,它包含可以在其他程序中调用的函数和数据。他是Windows操作系统中的一个重要概念,用于代码共享和模块化。 特点 代码共享:多个程序可以同时使用同一个DLL文件,而不需要将其代码编译到每个程序中。这样可以节省
阅读全文
摘要:map/multimap容器 Map的特性是,所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一个元素被视为键值,第二个元素被视为实值,map不允许两个元素有相同的键值。 multimap和map的操作类似,唯一区别是multimap的键值可以重复。
阅读全文
摘要:set/multiset容器 简介 Set的特性是,所有元素都会根据元素的值自动被排序。Set不允许两个元素有相同的值。 Set的迭代器iterator是一种const_iterator,不能通过迭代器改变任意set元素的值。 multiset的特性和用法和set相同,唯一的差别在于它允许值重复。
阅读全文
摘要:queue容器 基本概念 queue是一种**先进先出的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素。 queue容器没有迭代器,所有元素进出都必须符合“先进先出”条件,只有顶端的元素才有机会被外界取用,所以也不提供遍历功能。 queue容器常用操作 构造函数 queu
阅读全文
摘要:stack容器 基本概念 stack是一种先进后出的数据结构,它只有一个出口,形式如下图所示。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何地方可以存取stack的娶她元素。换句话说,stack不允许有遍历行为。 元素推入栈的操作称为push,将元素推出栈的操作称为p
阅读全文
摘要:模板 模板介绍 C++提供了函数模板(function template)。所谓函数模板。实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡事函数体相同的函数都可以使用这个模板代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时
阅读全文
摘要:explicit关键字 在C++中,explicit关键字用于控制某些类型转换的隐式性。它主要与构造函数和转换操作符相关联,下面详细介绍explicit关键字的使用和作用。 explicit构造函数 当构造函数被声明为explicit时,它指示的这个构造函数只能使用显式构造对象,不能用于隐式类型转换
阅读全文
摘要:列表初始化 在C++11及以后的版本中,使用{}来初始化变量是一种新的初始化方法,称为列表初始化(List Initialization)。这种初始化方法可以用来初始化内置类型、自定义类型以及聚合类型。 示例代码: /*AVL 树节点类*/ struct TreeNode{ int val{}; i
阅读全文
摘要:string类型操作 字符串切割 str.substr(索引,切割的个数) -> 返回字符串 注意:第二个参数为切割的个数 string buf = "abcdefg"; buf.substr(0, 2); // 结果为 "ab" buf.substr(1, 3); // 结果为 "bcd" 按字符
阅读全文
摘要:char*类型与vector<char> 类型的相互转换 很多时候需要使用动态的字符串,但是char*难以完成相应的扩容操作,而动态数组vector则可以简单地完成,结合二者特性就可以完成动态字符串,同时,也需要二者类型的相互转换: char* 转vector<char> vector<char>
阅读全文
摘要:文件操作 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放 通过文件操作可以将数据持久化 C++中对文件操作需要包含头文件 "fstream" 文件类型分为两种: 文本文件:文件以文本的ASCII码的形式存储在计算机中 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接
阅读全文
摘要:多态 基本概念 多态是C++面向对象三大特性之一 多态分为两类 静态多态:函数重载和运算符重载属于静态多态,复用函数名 动态多态:派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定——编译阶段确定函数地址 动态多态的函数地址晚绑定——运行阶段确定函数地址 动态多态满足条
阅读全文
摘要:C++内存空间的布局 每个应用都有自己独立的内存空间,其主要分为4个区域 代码区(代码段) 用于存放代码所转换成的机器码 数据段(全局区) 用于存放全局变量等 栈空间 每调用一个函数,就会给它分配一段连续的内存地址,函数执行完毕会自动回收这段占空间 自动分配和回收 堆空间 需要主动申请和释放 堆空间
阅读全文
摘要:类和对象 C++面向对象的三大特性为:封装、继承、多态 封装 成员变量私有化,提供公共的getter和setter给外界去访问成员变量 封装的意义 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制 类在设计时,可以把属性和行为放在不同的权限下,加以控制 访问权限有三种: 1.pu
阅读全文
摘要:list容器 简介 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,节点可以在运行时动态生成。每个节点包括两部分:一个是存储数据元素的数据域,另一个是存储下一节点的指针域。 相较于vector的连续线性空间,list就显得复
阅读全文