![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++/C
文章平均质量分 50
洌泉_就这样吧
Less is more.
展开
-
【C++项目实战】链表创建和内存释放
#include<iostream>using namespace std;struct Node{ int val; Node *next, *random; Node(int x): val(x), next(nullptr), random(nullptr){}; void DeleteList(){ Node*p=this; Node*head; if(p){ int val =原创 2021-07-22 11:28:01 · 1573 阅读 · 0 评论 -
【LeetCode/力扣】1818. 绝对差值和
1 题目描述题目链接:https://leetcode-cn.com/problems/minimum-absolute-sum-difference/添加链接描述给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n 。数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= i < n)的 总和(下标从 0 开始)。你可以选用 nums1 中的 任意一个 元素来替换 nums1 中的 至多 一个元素,以 最小化原创 2021-07-14 09:33:16 · 127 阅读 · 0 评论 -
【LeetCode/力扣】1418. 点菜展示表
1 题目描述题目链接:https://leetcode-cn.com/problems/display-table-of-food-orders-in-a-restaurant/给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。请你返回该餐厅的原创 2021-07-06 09:44:10 · 96 阅读 · 0 评论 -
【LeetCode/力扣】726. 原子的数量
1 题目描述题目链接:https://leetcode-cn.com/problems/number-of-atoms/给定一个化学式formula(作为字符串),返回每种原子的数量。原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字。如果数量大于 1,原子后会跟着数字表示原子的数量。如果数量等于 1 则不会跟数字。例如,H2O 和 H2O2 是可行的,但 H1O2 这个表达是不可行的。两个化学式连在一起是新的化学式。例如 H2O2He3Mg4 也是化学式。一个括号中的化原创 2021-07-05 11:23:32 · 328 阅读 · 0 评论 -
【C++项目实战】赋值操作符重载
1 知识点构建类传递字符数组使用cstring中的函数strlen和strcpy赋值操作符重载2 代码#include <iostream>#include <cstring>using namespace std;class CMyString{public: CMyString(char* pData = nullptr): m_pData(pData){} // 构造函数,列表初始化 CMyString(const CMyString&a原创 2021-06-30 10:38:03 · 112 阅读 · 0 评论 -
C++入门
经典书籍C++ programming languageC++ primerEffective C++ Third EditionThe C++ Standard LibrarySTL源码剖析C和C++对比C包含data和functions,data中的variables都是全局的C++采用class/struct来包含data和functions,从而创建对象C++类型object based:面对的是单一class的设计object oriented:面对的是多重classes原创 2021-06-22 16:22:36 · 58 阅读 · 0 评论 -
【C++项目实战】继承和多态
1 知识点类定义(class默认private,struct默认public,完成定义要加;)类传值(构造函数参数,通过派生类传值)指向类对象的指针(this指代当前对象地址,指针访问成员用->)构造函数和析构函数(构造函数是类同名函数,析构函数前加~)访问修饰符(public可类外访问,protected派生访问,private类外不可访问)类继承(derive class : 访问修饰符 base class,多重继承逗号隔开 )虚函数、多态、虚析构函数(virtual)内联函数原创 2021-06-15 17:10:43 · 321 阅读 · 0 评论 -
【C++项目实战】打印输出
1 知识点赋值和初始化while和for循环标准化输出vector动态数组2 代码#include<iostream> // io头文件#include<vector> // 动态数组容器头文件using namespace std; // 标准库命名空间int main(){ // 二维数组初始化,表示生成8x11、元素全为'*'的二维数组 vector<vector<char>>vec(8,vector<ch原创 2021-06-15 10:35:39 · 3850 阅读 · 1 评论 -
(Effective C++)读书学习笔记 —— 概览
视 C++ 为一个语言联邦(C、Object-Oriented C++、Template C++、STL)宁可以编译器替换预处理器(尽量以 const、enum、inline 替换 #define)尽可能使用 const确定对象被使用前已先被初始化(构造时赋值(copy 构造函数)比 default 构造后赋值(copy assignment)效率高)了解 C++ 默默编写并调用哪些函数(编译器暗自为 class 创建 default 构造函数、copy 构造函数、copy assignment .转载 2021-06-15 09:58:59 · 68 阅读 · 0 评论 -
【LeetCode/力扣】879. 盈利计划
1 题目描述题目链接:https://leetcode-cn.com/problems/profitable-schemes/集团里有 n 名员工,他们可以完成各种各样的工作创造利润。第 i 种工作会产生 profit[i] 的利润,它要求 group[i] 名成员共同参与。如果成员参与了其中一项工作,就不能参与另一项工作。工作的任何至少产生 minProfit 利润的子集称为 盈利计划 。并且工作的成员总数最多为 n 。有多少种计划可以选择?因为答案很大,所以 返回结果模 10^9 + 7 的原创 2021-06-09 09:39:13 · 118 阅读 · 0 评论 -
【C++ Primer 第五版】函数指针
函数指针指向的是函数,而不是对象函数的类型由其返回类型和形参类型共同决定,与函数名无关bool lengthCompare(const string &, const string &);bool (*ptr)(const string &, const string &);//替换函数名即可如果上述指针没有括号,则表示函数ptr返回值类型是bool*如果将函数名作为一个值使用,则自动转换为指针可以直接使用函数调用函数,而无须解引用指针pf = lengthC原创 2021-06-07 17:31:09 · 110 阅读 · 0 评论 -
【C++ Primer 第五版】函数指针
函数指针指向的是函数,而不是对象函数的类型由其返回类型和形参类型共同决定,与函数名无关bool lengthCompare(const string &, const string &);bool (*ptr)(const string &, const string &);//替换函数名即可如果上述指针没有括号,则表示函数ptr返回值类型是bool*如果将函数名作为一个值使用,则自动转换为指针可以直接使用函数调用函数,而无须解引用指针pf = lengthC原创 2021-06-07 17:30:30 · 94 阅读 · 0 评论 -
【C++ Primer 第五版】函数匹配
调用函数时需要确定选用哪个重载函数首先确定对应的重载函数集,要求与被调用的函数同名,且声明在调用点可见,这些函数为候选函数判断能被实参调用的函数,要求形参数量与调用的实参数量相等,且类型相同,或能转换成形参的类型,这些函数称为可行函数寻找自家匹配,根据调用实参来寻找形参类型与实参类型最匹配的那个可行函数,基本思想是:实参类型与形参类型越接近,则匹配越好优先考虑没有内置类型转换的,如果没有最佳匹配,就会出错调用重载函数应避免强制类型转换最佳匹配顺序:精确匹配通过const转换实现的匹配原创 2021-06-07 17:11:35 · 75 阅读 · 0 评论 -
【C++ Primer 第五版】特殊用途语言特性
1 默认实参默认实参是指函数调用的时候反复出现的值调用默认实参的函数,可以包含该实参,也可以省略该实参一旦某个形参被赋予默认值,则它后面的所有形参都需要有默认值给定作用域中一个形参只能被赋予一次默认实参不能修改已经声明过、存在的默认值,但可以添加默认实参局部变量不能作为默认实参,只要表达式的类型可以转换为形参所需的类型,该表达式就能作为默认实参2 内联函数内联函数可以避免函数调用的开销内联机制用于优化规模较小、流程直接、频繁调用的函数,很多编译器不支持内联递归函数如果一个函数是内联的,那原创 2021-06-07 16:59:07 · 72 阅读 · 0 评论 -
【C++ Primer 第五版】函数重载
重载:同一作用域内的几个函数的名字相同但形参列表不同函数接受的形参类型不一样,但执行的操作非常类型,编译器可以根据传递的实参类型推断想要的是哪个函数void print(const char *cp);void print(const int *beg, const int *end);void print(const int ia[], size_t size);函数名字仅仅是让编译器知道调用哪个函数,函数重载可以减轻程序员记名字的负担main函数的不能重载定义重载函数重载的函数的形原创 2021-06-07 16:09:57 · 130 阅读 · 0 评论 -
【LeetCode/力扣】494. 目标和
1 题目描述题目链接:https://leetcode-cn.com/problems/target-sum/–给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nu原创 2021-06-07 15:12:59 · 97 阅读 · 0 评论 -
【C++ Primer 第五版】返回类型和return语句
return语句终止当前正在执行的函数并将控制权返回到调用函数的地方,包括两种形式return;return expression;1 无返回值函数没有返回值的return语句只能用在返回类型是void的函数中返回void函数不要求非得有return语句,这类函数最后会隐式执行如果void函数想要提前退出,可以使用return语句如果使用return语句的第二种形式,expression必须是另一个返回void的函数2 有返回值函数有返回值函数的返回值类型必须和函数的返回类型相同,或者能原创 2021-06-04 16:28:32 · 189 阅读 · 0 评论 -
【LeetCode/力扣】525. 连续数组
1 题目描述题目链接:https://leetcode-cn.com/problems/contiguous-array/给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。2 代码原创 2021-06-03 09:14:42 · 88 阅读 · 0 评论 -
【C++ Primer 第五版】参数传递
每次调用函数时都会重新创建它的形参,并传入实参对形参进行初始化形参初始化与变量初始化一样形参的类型决定了形参和实参交互的方式,如果形参时引用类型,则它将绑定到对应的实参上,否则将实参的值拷贝后赋给形参当形参时引用类型,则称它对应的实参被引用传递或者函数被传引用调用与其他引用一样,引用形参也是它绑定对象的别名当实参拷贝给形参时,则形参和实参时两个相互独立的对象,这样的实参被值传递,或者函数被传值调用1 传值参数初始化一个非引用类型的变量,初始值被拷贝给变量,对变量的改动不会影响初始值传值参数的原创 2021-05-27 17:20:14 · 94 阅读 · 1 评论 -
【LeetCode/力扣】1190. 反转每对括号间的子串
1 题目描述题目链接:https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses/给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。示例 1:输入:s = “(abcd)”输出:“dcba”示例 2:输入:s = “(u(love)i)”输出:“iloveu”示原创 2021-05-26 10:50:20 · 117 阅读 · 0 评论 -
【C++ Primer 第五版】函数基础
1 函数介绍函数是一个命名了的代码块,通过调用函数执行相应的代码,函数可以有0个或多个参数,而且通常会产生一个结果,可以重载函数,一个函数名对应不同的几个函数典型的函数定义包括:返回类型(return type)、函数名字、由0个或多个形参(parameter)组成的列表以及函数体形参以逗号隔开,位于一对圆括号内函数执行的操作在语句块中说明,该语句块称为函数体(function body)调用运算符来执行函数调用运算符的形式是一对圆括号,作用于一个表达式,表达式是函数或者指向函数的指针圆括号内原创 2021-05-25 16:26:35 · 170 阅读 · 0 评论 -
【C++ Primer 第五版】try语句块和异常处理
异常是指存在于运行时的反常行为,超出了函数正常功能的范围,典型的异常包括失去数据库连接以及遇到意外输入C++语言的异常护理包括:throw表达式,异常检测部分使用throw表达式表示它遇到了无法处理的问题try语句块,异常处理部分使用try语句块处理异常,try语句块以关键字try开始,并以一个或多个catch子句结束,catch也称为异常处理代码一套异常类,用于在throw表达式和相关的catch子句之间传递异常的具体信息1 throw表达式Sales_item item1, item2;原创 2021-05-25 15:08:46 · 166 阅读 · 0 评论 -
【C++ Primer 第五版】跳转语句
跳转语句用于中断当前的执行过程,C++语言提供了4种跳转语句,break、continue、goto、return1 break语句break语句负责终止离它最近的while、do while、for或switch语句,并从这些语句之后的第一条语句开始继续执行break语句只能出现在迭代语句或switch语句内部2 continue语句continue语句终止最近的循环中的当前迭代,并立即进行下一次迭代continue语句只能出现在for、while和do while循环的内部,或者嵌套在此类循原创 2021-05-25 14:27:06 · 86 阅读 · 0 评论 -
【C++ Primer 第五版】 迭代语句
迭代语句通常称为循环,while和for语句在执行循环体之前检查条件,do while语句先执行循环体,再检查条件1 while语句while (condition) statement当不确定迭代多少次,使用while比较合适想在循环结束后访问循环控制变量也应该使用whilevector<int> v;int i;while (cin >> i) v.push_back(i);auto beg = v.begin();while (beg !=原创 2021-05-25 11:22:47 · 94 阅读 · 0 评论 -
【C++ Primer 第五版】条件语句
C++提供两种按条件指向的语句,一种是if语句,根据条件决定控制流,另一种是switch语句,根据计算得到的整型表达式的值来选择执行路径1 if 语句if语句的作用是判断一个指定条件是否为真,根据判断结果来决定是否执行另外一条语句,if语句可以有else分支,也可以没有if (condition) statementelse statement2if语句的condition必须用圆括号包围condition可以是表达式,也可以是初始化了的变量condition中的内容必须能转原创 2021-05-25 11:04:06 · 134 阅读 · 1 评论 -
【C++ Primer 第五版】语句作用域
可以在if、switch、while和for语句的控制结构内定义变量,这些变量只能是内部可见while (int i = get_num()) // 每次迭代时创建并初始化i cout << i << endl; i = 0; // 错误,在循环外部无法访问i练习:找出例子中的问题while (string::iterator iter != s.end()){/*...*/} // 每次循环则重新定义迭代器,无法起到迭代效果while (bool stat原创 2021-05-25 10:36:26 · 85 阅读 · 0 评论 -
【C++ Primer 第五版】简单语句
C++大多数语句都以分号结束表达式ival+5,末尾加上分号变成表达式语句1 空语句最简单的语句是只有一个分号的空语句常见情况是,空语句会使用在循环中while (cin >> s && != sought) ;// 空语句使用空语句应该加上注释,让读者知道是有意省略别漏写分号,也别多写while (iter != svec.end()) ; // while 循环体是空语句,会产生无限循环 ++iter;// 递增运算不属于循环一部分 2原创 2021-05-25 10:29:08 · 82 阅读 · 0 评论 -
【C++ Primer 第五版】运算符优先级表
结合律和运算符功能用法左 ::全局作用域::name左 ::类作用域class::name左 ::命名空间作用域namespace::name结合律和运算符功能用法左 .成员选择object.member左 ->成员选择pointer->member左 []下标expr[expr]左 ()函数调用name(expr_list)左 ()类型构造type(expr_list)...转载 2021-05-25 10:12:58 · 135 阅读 · 0 评论 -
【C++ Primer 第五版】类型转换
C++中某些类型可以相互转换,则它们之间是有关联的double和int的数相加,C++会做隐式转换,避免损失精度,整型转换为浮点型隐式转换情况:int类型提升为较大的整数类型非布尔值转换成布尔值初始化时,初始值转换成变量的类型,赋值语句中,右侧运算对象转换成左侧运算对象的类型算术运算或关系运算的运算对象有多种类型,需要转换成同一类型函数调用也会发生类型转换1 算术转换一种算术类型转换成另外一种算术类型整型提升赋值把小整数类型转换成较大的整数类型无符号类型不小于带符号类型,带符号的运原创 2021-05-25 09:36:33 · 423 阅读 · 0 评论 -
【C++ Primer 第五版】逗号运算符
含有两个运算对象,按照从左向右的顺序依次求值逗号运算符真正的结果是右侧表达式的值逗号运算符常常被用在for循环中vector<int>::size_type cnt = ivec.size()// 将把从size到1的值赋给ivec的元素for(vector<int>::size_type ix = 0; ix != ivec.size(); ++ix, --cnt){ ivec[ix] = cnt;}练习:4.31 前置和后置的递增运算符后置的递增运原创 2021-05-24 15:48:05 · 117 阅读 · 0 评论 -
【C++ Primer 第五版】sizeof运算符
sizeof运算符返回一条表达式或一个类型名字所占的字节数sizeof满足右结合律,所得值是size_t类型的常量表达式sizeof使用形式为:sizeof (type);sizeof expr; // 返回表达式结果类型的大小sizeof运算符无须作用于具体对象,只需得到类成员的大小char类型,得到结果为1引用类型,得到被引用对象所占空间大小指针,得到指针本身所占空间大小解引用指针,得到指针指向对象的所占空间大小,指针不必有效数组,得到整个数组所占空间大小string或vect原创 2021-05-24 11:23:06 · 91 阅读 · 0 评论 -
【C++ Primer 第五版】位运算符
1 位运算符简介位运算作用于整数类型,并把运算对象看成是二进制位的集合位运算符提供检查和设置二进制位的功能位运算符包括:~:位求反,~expr<<:左移,expr1 << expr2>>:右移,expr1 >> expr2&:位与,expr1 & expr2^:位异或,expr1 ^ expr2|:位或,expr1 | expr2位运算对象如果是小整型,会被自动提升1 移位运算符对运算对象执行基于二进制的移动操作右原创 2021-05-24 11:15:43 · 132 阅读 · 0 评论 -
【LeetCode/力扣】664. 奇怪的打印机
1 题目描述题目链接:https://leetcode-cn.com/problems/strange-printer/有台奇怪的打印机有以下两个特殊要求:打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。示例 1:输入:s = “aaabbb”输出:2解释:首先打印 “aaa” 然后打印 “bbb”。示例 2:输入:s = “aba”输出:2原创 2021-05-24 09:44:57 · 230 阅读 · 0 评论 -
【C++ Primer 第五版】条件运算符
1 概念条件运算符(?:)允许把简单的if-else逻辑嵌入到单个表达式中,条件运算符的形式如下:cond ? expr1 : expr2运算顺序为:先求cond的值,如果条件为真对expr1求值并返回该值,否则对expr2求值并返回该值条件运算符只计算两个表达式其中一个2 嵌套条件运算符finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass"原创 2021-05-20 11:09:41 · 109 阅读 · 0 评论 -
【C++ Primer 第五版】成员访问运算符
1 概述点运算符和箭头运算符都可以用于访问成员点运算符获取类对象的一个成员表达式ptr->mem等价于(*ptr).memstring s1 = "a string", *p = &s1;auto n = s1.size(); // 运行string对象s1的size成员n = (*p).size(); // 运行p所指对象的size成员n = p->size(); // 等价于(*p).size()解运算符优先级低于点运算符,所以执行解运算的子表达式需原创 2021-05-20 10:34:10 · 445 阅读 · 0 评论 -
【C++ Primer 第五版】递增和递减运算符
递增运算符++和递减运算符–作用是为对象加1或减1操作的一种简洁的书写形式递增和递减运算符有两种形式,前置版本和后置版本前置版本:先加1或减1,再作为求值结果int i = 0, j;j=++i; // j=1,i=1,前置版本得到递增后的值后置版本:同样加1或减1,求值结果是递增或递减之前的值int i = 0, j;j=++i; // j=0,i=1,前置版本得到递增前的值建议,养成前置版本的习惯,不用担心性能,也复合编程初衷混用解引用和递增运算符auto pbeg =原创 2021-05-19 15:57:48 · 111 阅读 · 0 评论 -
【C++ Primer 第五版】赋值运算符
赋值运算符左侧运算对象必须时一个可修改的左值如果左侧运算对象是内置类型,那么初始值列表只能最多包含一个值对于类类型,由类本身决定,例如vector,可以赋予多个值vector<int> vi;vi = {0,1,2,3,4,5};赋值运算满足右结合律赋值运算返回的是其左侧运算对象赋值运算优先级较低,所以条件语句中赋值部分通常加上括号切勿混淆相等运算符和赋值运算符复合赋值运算符,等价于a= a op b算术运算符:+=,-=,*=,/=,%=位运算符:<<=原创 2021-05-19 15:07:24 · 86 阅读 · 0 评论 -
【C++ Primer 第五版】逻辑和关系运算符
1 逻辑和关系运算符介绍逻辑和关系运算符的返回值都是布尔类型,值为0的运算符表示假,否则表示真对于两类运算符来说,运算对象和求值结果都是右值逻辑非:!小于/小于等于:</<=大于/大于等于:>/>=相等/不相等:==/!=逻辑与:&&,当且仅当两个运算对象都为真时结果为真逻辑或:||,只要两个运算对象中的一个为真结果就为真2 逻辑运算符短路求值:先求左侧再求右侧逻辑与,当且仅当左侧为真时才计算右侧逻辑或,当且仅当左侧为假时才计算右侧逻原创 2021-05-19 14:57:58 · 134 阅读 · 0 评论 -
【C++ Primer 第五版】算术运算符
优先级:一元运算符>乘除>加减优先级高的运算符比优先级低的运算符组合得更紧密算术运算符都满足左结合律,优先级相同时从左往右组合对大多数运算符来说,布尔类型的运算对象将被提升为int类型,参与运算时将被提升为整数值1,求负后是-1当计算结果超过该类型所能表示的范围会溢出,不一定会报错,但是溢出后值的结果是不确定的,应避免溢出错误作用于算术类型的对象时,整数相除结果仍为整数+、-、*、/对应加法、减法、乘法、除法运算符%俗称为取余或取模运算符,负责计算得到两个整数相除所得的余数,参与取原创 2021-05-19 14:24:13 · 87 阅读 · 0 评论 -
【C++ Primer 第五版】 表达式基础
1 基本概念表达式是由一个或多个运算对象组成,求值得到结果字面值和遍历时最简单的表达式一个运算符和一个或多个运算对象组合起来可以生成复杂表达式C++包含一元运算符、二元运算符、三元运算符一元运算符:作用于一个运算对象的运算符,如取地址符&和解引用符*二元运算符:作用于两个运算对象的,如相等==和乘法*三元运算符:作用于三个运算对象函数调用也是一种特殊的运算符,且数量没有限制运算符具有优先级进而结合律,及运算对象的求值顺序运算对象不同时,有时会强制转换,通常会被提升重载运算符原创 2021-05-19 14:04:51 · 72 阅读 · 0 评论