- 博客(41)
- 收藏
- 关注
原创 leetcode209_长度最小的子数组
(3)right不动,left移动,缩小窗口,直至不符合要求;(2)left不动,right移动,扩大窗口,直至符合要求;(4)重复(2)和(3),直至right到达末尾。(1)初始化left = right = 0;要求某个连续的区间内的元素值总和>=S .思路:滑动窗口:本质上是一种双指针法。
2024-05-24 19:17:52
180
原创 leetcode977_有序数组平方后仍有序
由于元素是非递减顺序,因此平方后最大的数字要么在最左边,要么在最右边,因此不用关心靠里的元素值。前提:数组是非递减顺序。
2024-05-23 21:41:37
163
原创 Leetcode704_二分查找
1, 1)是不合法的,不应当出现这样的区间,因此while循环判断语句应改为left < right。[1, 1]是合法的,因此while循环判断语句为left <= right;题目前提是数组有序,默认递增。
2024-05-21 19:29:39
662
原创 C++初探_右值引用
分析:x+y是一种右值,因此可以将r1关联x+y的结果。那么,将右值关联到右值引用导致该右值被存储到特定的位置,且可以获取该位置的地址(也就是说,可以用&访问r1)。包括:字面常量、诸如x+y等的表达式,以及返回值的函数。此时,再对y进行改动,r1的值是不会受到影响的。左值:在内存中有确定的存储地址。
2024-05-18 20:58:26
195
原创 C++初探_关联容器
容器都是经过排序的。因此,其实如果要向关联容器中插入对象,只用指定内容,不需指定插入位置。关联容器将键和值关联在一起,并使用键来查找值。键类型与值类型相同,一个键可能对应多个值;键类型与值类型相同,一个键可能对应多个值。键类型与值类型相同,键值对一一对应;键类型与值类型不同,键值对一一对应;
2024-05-16 14:56:48
96
原创 C++初探_STL特征的复杂度
对于vector容器,要实现把一个新值放到所有元素最前面,那么就需要所有元素向后移动一位,从而腾出空间。这种操作的复杂度是“线性时间”,十分糟糕。而对于list和deque,属于“固定时间”。因此,“固定时间”复杂度的操作才会被实现。若复杂度为固定时间:操作发生在运行时,但是独立于对象中的元素数目(不受元素个数影响);若复杂度为编译时间:操作将在编译时执行,执行时间为0;若复杂度为线性时间:此时,时间与元素数目成正比。
2024-05-15 19:44:42
238
原创 C++初探_char类型与string类型的输入
2>. 读取字符串的函数是istream类的方法,因此,cin.getline()中,cin是作为调用对象;而对于string版本的getline()函数是一个独立的函数,因此cin作为函数的参数。1>. string版本的getline()函数将自动确定目标string对象的大小,因此不需要指定长度10。①共同点:都有一个可选参数,可以指定使用哪个字符串在确定输入边界,默认边界是'\n'。首先,有两个版本的getline()函数。
2024-05-14 16:23:18
218
原创 C++初探_异常机制
这个try快中使用了函数调用,当调用时确实出现了异常,会利用throw语句引发异常。throw语句实际上是跳转,终止函数的执行,将控制权返回,然后寻找与引发异常类型匹配的异常处理程序。使用catch捕获异常。catch参数为指向char的指针,因此throw传递的字符串传给char*,类型匹配。然后程序跳到catch块中执行程序。try块中的代码表示:需要注意这里面的代码,可能会出现问题,引发异常。对程序运行中发生的异常情况进行响应并处理。(3)异常处理程序catch。(2)引发异常throw。
2024-05-12 10:24:34
211
原创 C++初探_友元类
但同时,这个Remote类成员函数又使用了Tv引用作为对象,编译器同样应知道Tv是什么,那么Tv又要定义在Remote前面。存在的问题:编译器必须提前知道Tv类中onoff()的声明。但是刚才只对Tv类做了前向声明,Tv类的定义在Remote类之后。解决办法:在Remote类中,只对成员函数做声明,不做定义实现。分析:只能前向声明Tv,不能前向声明Remote。分析:这行代码想把class Remote中的set_chan函数作为class Tv的友元。分析:这个函数会使用Tv类的onoff()成员函数。
2024-05-11 15:18:04
195
原创 C++初探_类模板
存在的意义:有时候,可能需要为特殊类型实例化时,对模板方法进行一些修改,做出不同的行为。分析:非类型参数/表达式参数有一些限制:只能是整型、枚举、指针或引用。目前为止使用的都是隐式实例化,即:在声明对象的时候给出具体的类型。使用关键字template,并指出具体类型来声明一个类。具体化:分为隐式实例化、显式实例化和显式具体化。2.非类型参数/表达式参数。3.模板类使用多个类型参数。4. 类模板的具体化。
2024-05-10 15:23:26
220
原创 C++初探_虚基类的声明
存在的原因:希望在多重继承时(即:派生类有多个直接基类,而这些直接基类是从同一个祖先基类派生而来),派生类只继承一个共同的祖先基类对象。分析:禁止信息通过中间类自动传递给虚基类。因此,在派生类中,必须通过显式地调用虚基类构造函数进行初始化。
2024-05-09 20:18:18
231
原创 C++初探_继承与动态内容分配
(2)复制构造函数:应在成员初始化列表调用基类的复制构造函数来处理基类的成员。这是合理的,因为基类的引用可以指向派生类的对象,反过来则不允许(单向性)。并且,派生类的析构函数、复制构造函数、赋值运算符重载函数都将使用相应的基类的析构函数、复制构造函数、赋值运算符重载函数来处理基类的元素。若派生类使用了动态内存分配,那么就必须为派生类定义显示的:析构函数、复制构造函数、赋值运算符重载函数。(3)赋值运算符重载函数:应显示地使用作用域运算符调用基类的赋值运算符重载函数。
2024-05-07 15:22:31
208
原创 C++初探_创建派生类构造函数
(5)创建派生类对象时,程序首先创建基类对象。(6)对象过期时,释放对象的顺序与创建对象的顺序相反:首先执行派生类的析构函数,然后调用基类析构函数。(4)必须使用基类的公有方法来访问私有的基类成员,也就是说,派生类构造函数必须使用基类构造函数。(2)基类的私有部分也将成为派生类的一部分,但是只能通过基类的公有和保护方法访问。(1)通过继承,派生类对象存储了基类的数据成员,并且可以使用基类的方法。(3)派生类的构造函数必须为新增成员和继承的成员提供数据。
2024-05-06 15:39:57
231
原创 C++初探_转换函数
(1)转换函数:①必须是类方法,受Stone::限定;②不能指定返回类型;④必须返回转换后的值。(2)将基本类型值赋值给对象:会将接受唯一一个参数的构造函数作为转换函数,完成工作;转换函数存在的原因:反转赋值顺序:将类对象赋值给一个基本类型值。将对象赋值给基本类型值:需要自定义转换函数。
2024-05-04 16:25:18
231
原创 C++初探_间接成员运算符(->)在类中的使用
因此,top指向的对象调用了函数Stock::topval,接着,函数Stock::topval返回对象的引用,再用&符号取地址,更新top指向的位置。理解:(1)top->用于访问top指向的对象的成员或成员函数。(2) &用来取地址。
2024-04-29 17:13:13
228
原创 C++初探_char*返回类型函数
分析:f()返回值类型为指向char的指针。在main()中令char* p = f();实际上是两个指针同时指向了相同的内存空间,而不是指针对指针赋值。
2024-04-28 17:21:30
234
原创 C++初探_静态存储变量
(3)无链接性:只能在当前代码块中访问,在代码块中声明并使用static。(2)内部链接性:只能在当前文件中访问,在代码外声明并使用static;(1)外部链接性:可在其他文件中访问,在代码外部声明即可;
2024-04-26 19:17:52
236
1
原创 C++初探_自动类型转换
理解:(1)当运算涉及到两种类型时,较小的类型将被转换为较大的类型;(2)较小的类型值赋值给取值范围更大的类型时,通常不会导致什么问题。分析:a+b应该输出较大类型,即int类型。
2024-04-25 19:06:15
230
1
原创 C++初探_strcmp()的使用
分析:strcmp()函数接受两个参数为地址,然后比较ASCII码值,第一个参数大于第二个参数返回1,小于返回-1,等于返回0.。
2024-04-20 09:45:19
301
原创 C++初探_cin.get()的使用
熟悉:cin.get()调用,可以读取下一个字符,即使是换行符。为下一行输入做准备。因此,表现效果为输入完成后,停顿一下,已确认信息无误再按回车再继续程序。
2024-04-18 09:18:03
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人