- 博客(440)
- 资源 (17)
- 收藏
- 关注
原创 【18】c++11新特性 —>线程同步
线程同步:线程同步就是让多个线程按顺序访问临界区域,只有在当前线程访问临时区结束后,下一个线程才能继续访问。(临界区加锁即可)
2023-11-09 15:25:06
320
原创 【17】c++11新特性 —>弱引用智能指针weak_ptr(2)
通过wek_ptr返回管理this资源的共享智能指针对象shared_ptr。C++11中为我们提供了一个模板类叫做std::enable_shared_from_this,这个类中有一个方法叫做shared_from_this(),通过这个方法可以返回一个共享智能指针,在函数的内部就是使用weak_ptr来监测this对象,并通过调用weak_ptr的lock()方法返回一个shared_ptr对象。
2023-11-08 20:25:49
490
原创 【16】c++11新特性 —>弱引用智能指针weak_ptr(1)
弱引用的智能指针,它不共享指针,不能操作资源,是用来监视shared_ptr中管理的资源是否存在。
2023-11-08 17:27:59
169
原创 【16】c++11新特性 —>独占智能指针unique_ptr
std::unique_ptr是一个独占的智能指针,他不允许其他的智能指针共享其内部的指针,可以通过他的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr。int。
2023-11-08 15:46:11
119
原创 【15】c++11新特性 —>共享智能指针(指定删除器)
当智能指针管理的内存对应的引用计数变为0的时候,这块内存就会被智能指针析构掉了。另外,我们在初始化智能指针的时候也可以自己指定删除动作,这个删除操作对应的函数称之为删除器,这个删除器函数本质是一个回调函数,我们只需要进行实现,其调用是由智能指针完成的。
2023-11-08 15:12:20
325
原创 【14】c++11新特性 —>共享智能指针
在C++中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。。
2023-11-07 18:13:10
293
原创 【13】c++11新特性 —>call_once
在某些特定情况下,某些函数只能在多线程环境下调用一次,比如:要初始化某个对象,而这个对象只能被初始化一次,就可以使用。来保证函数在多线程环境下只能被调用一次。do_once函数只被调用了一次。
2023-11-07 14:48:21
226
原创 【12】c++11新特性 —>forward完美转发
右值引用类型是独立于值的,一个右值引用作为函数参数的形参时,在函数内部转发给内部其他函数时,他就变成了一个左值。并不是原来的类型了。如果需要按照参数原来的类型转发给另一个函数,可以使用std::forward()函数,该函数的功能称之为完美转发。当T不是左值引用类型(T& )时,t将被转换为T类型的右值;当T为左值引用类型(T& )时,t将被转换为T类型的左值;用一个示例演示forward。
2023-11-07 14:18:38
204
原创 【11】c++11新特性 —>move移动语义(2)
当使用移动构造函数时,通常需要使用std::move()函数将左值转换为右值,以便编译器识别出应该调用移动构造函数而非拷贝构造函数.通过使用std::move(),程序员明确知道自己正在进行资源所有权转移,令代码更加清晰和安全。在c++11标准中,引入右值引用和移动语义.移动构造函数允许对象的资源(比如堆内存、文件句柄等)在被移动时进行转移,而非传统的拷贝,这种机制可以大幅度提高性能,特别时对于大型对象来说。
2023-11-07 11:52:46
123
原创 【10】c++11新特性 —>move移动语义(1)
移动语义(Move Semantics)是C++11引入的一个重要特性,它允许在不复制数据的情况下将资源(如内存、指针等)从一个对象转移到另一个对象,从而可以提高程序的性能。在C++11添加了右值引用,并且不能使用左值初始化右值引用,如果想要使用左值初始化一个右值引用需要借助std::move()函数,使用。使用这个函数并不能移动任何东西,而是和移动构造函数一样都具有移动语义,list ls2 = move(ls);//效率高,但是执行完成后,ls将为空。
2023-11-07 09:56:43
113
原创 【9】c++11新特性 —>&&的特性
c++中,不是所有情况下&&都代表一个右值引用,具体的场景体现在模板和自动类型推到中,如果是模板参数,需要指定为&&,如果是自动类型推到需要指定为auto&&,在这两种场景下&&被称为未定义的引用类型,另外还有一点需要额外注意const T&&表示一个右值引用,不是未定义类型。由于上述代码中存在T&&或者auto&&这种未定引用类型,当它作为参数时,有可能被一个右值引用初始化,也有可能被一个左值引用初始化,在进行类型推导时右值引用类型(&&)会发生变化,这种变化被称为。
2023-11-06 23:37:15
511
原创 【7】c++11新特性 —>右值引用(1)
C++11增加了一个新的类型,称为右值引用(R-value reference),标记为&&,左值:存储在内存中、有明确存储地址(可取地址)的数据;右值:可以提供数据值的数据()不可取地址。区别:可以使用&取地址的是左值,不能取地址的是右值。一般情况下=左边是左值,=右边是右值,上面前两行,a,b都是左值,520,1314是右值;但是a=b是一种特殊情况,在这个表达式中,a,b都是左值。
2023-11-02 09:51:55
99
原创 【6】c++11新特性(稳定性和兼容性)—>Lambda表达式
不需要额外写一个命名函数或者函数对象;(2)简洁:避免了代码膨胀和功能分散;(3)在需要的时间和地点实现。
2023-11-01 19:54:40
239
原创 14.力扣c++刷题-->有效括号
题目:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。每个右括号都有一个对应的相同类型的左括号。左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
2023-10-26 15:38:02
132
原创 12.力扣c++刷题-->罗马数字转整数
通常情况下,罗马数字中小的数字在大的数字的右边。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。注:解题关键是,判断当前数字和它下一个数字的大小,如果当前数字大于下一个数字就加当前数字,如果当前数字小于下一个数字,那就减去当前数字。X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
2023-10-26 10:33:42
167
原创 10.力扣c++刷题-->两数之和
题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
2023-10-24 11:40:45
139
原创 9.力扣c++刷题-->跳跃游戏
题目:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true;否则,返回 false。
2023-10-24 11:15:57
173
原创 8.力扣c++刷题-->买股票的最佳时机2
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。解题关键:获取最大利润,因为不考虑交易次数,那么收集所有上坡(即),就可以获的利润最大化。
2023-10-24 10:51:38
109
原创 7.力扣c++刷题-->买股票的最佳时机
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。
2023-10-24 10:29:49
94
原创 6.力扣c++刷题-->轮转数组
题目:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。解题关键:可以额外加一个数组,nums[(i+k)%k] = nums1[i];
2023-10-23 19:48:39
58
原创 5.力扣c++刷题-->找出众数
题目:给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
2023-10-23 19:22:55
323
原创 4.力扣c++刷题-->删除有序数组中的重复项 II
题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
2023-10-23 18:10:11
167
原创 3.力扣c++刷题-->删除有序数组中的重复项
题目:给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致。然后返回 nums 中唯一元素的个数。
2023-10-23 17:59:39
153
原创 2.力扣c++刷题-->移除元素
题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
2023-10-23 17:30:55
247
原创 1.力扣c++刷题-->合并两个有序数组
题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
2023-10-23 17:11:05
156
原创 【30】c++设计模式——>状态模式
状态模式是一种,它可以让一个对象在其内部状态发生变化时更改其行为。通过将每个状态封装成一个独立的类,我们可以使状态之间互相独立,并且使得状态的切换变得更加灵活、可扩展。(多个状态之间可以相互转换)在状态模式中,我们通常会定义一个抽象状态类(Abstract State),以及多个具体状态类(Concrete States)。每个具体状态都会实现抽象状态类中定义的各种操作,并且在需要时执行状态转换。
2023-10-23 11:55:37
338
原创 【29】c++设计模式——>策略模式
C++中的策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择算法的行为。策略模式通过将算法封装成独立的类,并且使它们,从而使得算法的变化独立于使用算法的客户端。
2023-10-22 21:45:45
431
原创 【28】c++设计模式——>观察者模式(1)
C++观察者模式(Observer Pattern)是一种设计模式,它用于在对象之间建立一种一对多的依赖关系。在该模式中,当一个对象(称为主题)发生变化时,所有依赖于它的对象(称为观察者)都会得到通知并自动更新。
2023-10-22 18:52:35
368
linux第三方库源码.rar
2021-06-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人