- 博客(51)
- 收藏
- 关注
原创 小美的区间删除
1、将每个数字中的2和5剥离出来,然后用两个数组进行记录,然后其子数。,由于前缀和是递增的,因此可以使用二分,找到右边界。因为结尾0的个数取决于有多少对。了,因此减去1,此时是刚好的。值的位置,但是这时就不符合。
2024-05-14 20:27:49 1123
原创 1191. K 次串联后最大子数组之和
当l>=2n,那么就是多个arr数组连接在一起了,这时候,就是k-2个arr和加上l<2n时候的结果了。当k=1,跟经典的就没什么两样了。当k>2,思考子数组的长度l。
2024-04-30 14:48:04 113
原创 2266. 统计打字方案数
这道题,观察就会发现,我们只需要看连续一样的子串,然后看他能够形成多少个组合,然后每个这样的子串相乘就能得到结果。如何对子串进行求出组合的结果呢,这就和爬楼梯一样,遍历每一个点,看能够到达这个点的方式有多少,不断的往后递推,就能得到答案。
2024-04-22 13:40:41 232
原创 洛谷P1064
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过n元钱就行”。如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。每个附件对应一个主件,附件不再有从属于自己的附件。金明想买的东西很多,肯定会超过妈妈限定的n元。于是,他把每件物品规定了一个重要度,分为5等:用整数1∼5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是。
2024-04-20 14:30:19 809
原创 洛谷P1776 宝物筛选
终于,破解了千年的难题。小 FF 找到了王室的宝物室,里面堆满了无数价值连城的宝物。这下小 FF 可发财了,嘎嘎。但是这里的宝物实在是太多了,小 FF 的采集车似乎装不下那么多宝物。看来小 FF 只能含泪舍弃其中的一部分宝物了。小 FF 对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小 FF 有一个最大载重为W的采集车,洞穴里总共有n种宝物,每种宝物的价值为vi,重量为wi,每种宝物有mi件。
2024-04-20 13:08:21 1103
原创 C++面经总结2024-4-2
std::function 是 C++ 标准库中的一个通用多态函数封装器,它可以包装任意可调用对象(函数、函数指针、成员函数指针、函数对象等),并提供统一的接口进行调用。std::function 的大小在不同的实现和平台上可能会有所不同,但通常情况下,它的大小大于等于一个指针的大小。std::function 的大小通常为 32 字节的主要原因是它需要存储包装的可调用对象以及一些额外的内部数据,以提供多态性和类型擦除的功能。
2024-04-02 16:02:23 822
原创 shared_ptr
为了实现线程安全性,std::shared_ptr 使用了原子操作来保证计数器的正确性,以及使用了适当的同步机制来确保对控制块的访问和修改的原子性。控制块是一个动态分配的结构体,其中包含了指向被管理对象的指针,以及一个计数器,用于记录有多少个 std::shared_ptr 对象共享同一个控制块。std::shared_ptr 内部的实现基于引用计数技术,它使用一个辅助的控制块(control block)来跟踪指针的计数和管理资源的释放。
2024-04-02 10:23:31 302
原创 协程的好处
减少资源竞争:在多线程编程中,共享数据的访问需要进行同步,以避免竞态条件。而协程通常是单线程的,避免了多线程之间的资源竞争和锁开销,简化了并发编程。这消除了线程切换的开销,并减少了上下文切换的次数。轻量级:协程是比线程更轻量级的任务单元,它们在应用程序中的创建和销毁的开销较低。相比于线程,可以创建大量的协程而不会造成显著的资源消耗。它们可以在任务间进行高效的切换,避免了线程创建和销毁的开销,从而提高了并发性能。通过使用协程,可以使用顺序的代码来表达异步操作,而不需要回调函数或者显式的线程管理。
2024-03-30 21:28:16 238
原创 C++ empalce_back 和 push_back的区别
之前,必须创建一个元素的副本或移动语义,并将该副本或移动对象传递给函数。函数通过在容器的尾部直接构造元素,避免了复制或移动操作。则在容器尾部直接构造新的元素,并避免了额外的复制或移动操作。选择使用哪个函数取决于你的需求和元素类型的特性。它们的主要区别在于元素的构造方式和参数传递方式。函数接受一个已经构造好的元素,并将其复制或移动到容器的尾部。的参数将被传递给元素类型的构造函数,以直接在容器中构造新的元素。对于构造成本较高或无法复制的类型(如移动语义的对象)特别有用。,而不需要提前创建元素的副本或移动语义。
2024-03-26 20:13:14 316
原创 C++函数vasprintf
vasprintf会根据format字符串和可变参数列表ap的内容动态分配足够的内存来存储格式化后的字符串,并将地址存储在strp指向的指针中。其中,strp是一个指向char指针的指针,用于存储格式化后的字符串的地址;vasprintf是一个C语言标准库函数,用于动态分配内存来存储格式化后的字符串。它类似于sprintf函数,但它接受一个可变参数列表作为参数,允许用户传递任意数量的参数。使用vasprintf函数可以方便地处理需要动态分配内存的字符串拼接操作,避免缓冲区溢出的风险。
2024-03-25 11:14:16 373
原创 C++ epoll线程安全知识点
当多个线程等待在 epoll_wait 上,并且有事件发生时,每个线程都有机会调用 epoll_wait 并获取事件。但是,只有其中一个线程的 epoll_wait 返回值会是一个正数,表示成功获取到的事件数量。其他线程的 epoll_wait 返回值可能是 0 或者负数。具体而言,当有事件发生时,内核会唤醒所有等待的线程,但只有一个线程能够成功获取到事件并返回正数的返回值。其他线程在调用 epoll_wait 后可能会因为竞争条件或时间差等原因得到不同的返回值。
2024-03-20 15:12:42 279
原创 C++hook知识点代码
进行同名字的函数进行定义,这时候会讲动态库中的函数给覆盖掉,但是我们又想使用动态库中的函数,此时怎么办呢,就需要dlsym这样讲其功覆盖的函数给勾出来,然后付给一个已经定义好的函数指针,此时就可以进行侵入式的hook开发了。
2024-03-18 11:00:56 291
原创 C++内存对齐知识点总结
理论上:32位系统:int 4字节,char1字节现代计算机内存空间都是按照字节划分的。理论上计算机系统对基本类型数据在内存的变量的访问可以从任何地址开始,但是时机的计算机系统对基本类型的数据在内存中存放的位置是有限制的,它们会要求这些数据的首地址的值是某个数的倍数一般为4或者是8,这就是所谓的内存对齐。
2024-03-12 22:44:03 287
原创 C++11 新特性之future和packaged_task
使用 std::launch::deferred 标志作为 std::async() 的第一个参数,可以延迟任务的执行。使用 std::launch::deferred 策略时,std::async() 函数不会创建新线程。使用 std::launch::async 标志作为 std::async() 的第一个参数,可以显式地要求任务在新线程中执行。使用 std::launch::async 策略时,std::async() 函数将创建一个新线程来执行任务,从而实现异步执行。
2024-03-09 09:39:29 622
原创 C++八股之RAII
RAII的核心思想是利用对象的生命周期和作用域来管理资源。当创建一个对象时,该对象的构造函数会自动被调用,可以在构造函数中获取所需的资源,例如打开文件、分配内存等。当对象超出其作用域时,它的析构函数会自动被调用,可以在析构函数中释放之前获取的资源,确保资源的及时释放。它是C++中的一项重要技术,通过在对象的构造函数中获取资源,在析构函数中释放资源,来确保资源的正确管理和释放,从而避免资源泄漏和错误。通过使用RAII,可以确保资源的正确获取和释放,即使在面对异常或提前返回的情况下也能够保证资源的释放。
2024-03-08 14:20:16 229
原创 C++八股之RAII
RAII的核心思想是利用对象的生命周期和作用域来管理资源。当创建一个对象时,该对象的构造函数会自动被调用,可以在构造函数中获取所需的资源,例如打开文件、分配内存等。当对象超出其作用域时,它的析构函数会自动被调用,可以在析构函数中释放之前获取的资源,确保资源的及时释放。它是C++中的一项重要技术,通过在对象的构造函数中获取资源,在析构函数中释放资源,来确保资源的正确管理和释放,从而避免资源泄漏和错误。通过使用RAII,可以确保资源的正确获取和释放,即使在面对异常或提前返回的情况下也能够保证资源的释放。
2024-03-07 23:09:33 350
原创 C++知识点之一
但是就会出现一个问题,就是返回的对象,再也无法进行内部的任何变量的修改了。因此建议还是别加了。其实后置++,应该返回值为const temp;i++++ 这种情况的发生。
2024-03-05 22:53:08 155
原创 服务器开发不常见操作
在提供的代码示例中,GetThis是一个静态成员函数,它返回一个指向Fiber类新实例的智能指针。这段代码是有效的C++语法,因为new Fiber是合法的,即使Fiber的构造函数是私有的。在C++中,类的成员函数(包括静态成员函数)可以访问该类的私有成员,包括私有构造函数。由于这个操作是在类的静态成员函数内部进行的,它可以访问私有构造函数来创建实例。因此,尽管通常静态成员函数无法直接调用非静态成员,但它们仍然可以访问类的所有私有和保护成员,包括私有构造函数,所以代码是可行的。
2024-03-04 19:08:59 216
原创 服务器开发之多线程记录
std::shared_mutex是一个支持共享和独占两种操作的互斥量。当使用std::unique_lock对std::shared_mutex进行上锁时,它会以独占模式对互斥量进行上锁,这意味着其他线程无法同时获得共享访问权,而只能等待当前线程解锁。因此,当你使用std::unique_lock对mutex_Appender进行上锁时,其他线程无法同时获得共享访问权,它们必须等待当前线程解锁后才能继续执行。这样确保了互斥访问,只有一个线程能够访问被保护的资源。
2024-03-01 20:12:27 227
原创 服务器框架开发期间遇到的问题Yaml-cpp
在书写日志模块的时候发现,yaml-cpp如果在子类override父类的函数中使用就会在编译阶段出现问题。注释部分就是会出现错误的代码。在toYamlString函数内。这个问题就是第三方库找不到。
2024-02-28 15:53:41 479 3
原创 C++static总结
静态成员变量:在类中声明的静态成员变量,属于类的一部分,而不是对象的一部分。它们的生存期与静态全局变量类似,在整个程序执行期间持续存在,直到程序终止时才被销毁。静态对象的生存期与程序的生存期相同,它们在程序启动时进行构造,并在程序结束时进行析构。无论是类内的静态常量还是全局的静态常量,它们在编译时期进行初始化,并且在整个程序执行期间保持不变。在类模板中,可以声明静态模板成员,它们与类的特定实例无关,可以在模板的不同实例之间共享。当涉及静态常量时,有两种常见的情况:类内的静态常量和全局的静态常量。
2024-02-24 21:50:55 949
原创 C++设计模式之建造者模式
一个产品,产品内部存在零件,但是零件的型号不固定。建造者:建造每一部分零件。指挥者:对产品的建造过程和顺序进行指挥。引用知识星球卡尔的话文档中的话:
2024-02-20 21:24:51 387 1
原创 leetcode之105. 从前序与中序遍历序列构造二叉树
先序列表的拆分根据中序列表左孩子的元素个数和右孩子的元素个数。中序列表的拆分根据先序列表的开头的元素分为左孩子和右孩子。需要不断的进行分别拆分先序遍历列表和后序遍历列表。
2024-02-20 10:37:17 317 2
原创 syscall(SYS_gettid)
需要注意的是,虽然这是在 Linux 中的一种实现方式,但在其他操作系统上,线程的唯一标识方式可能会有所不同。这就是为什么在跨平台开发时,应该避免直接依赖于特定平台的实现,而使用更加抽象和可移植的方式,如使用 C++ 标准库提供的线程标识符 std::thread::id。syscall(SYS_gettid) 获取的 TID(线程ID)在整个系统中是唯一的,是因为该系统调用返回的是 Linux 内核为每个轻量进程(LWP,也就是线程)分配的唯一标识。在 Linux 中,线程是通过轻量进程实现的。
2024-02-15 20:21:27 675 1
原创 mac os安装cmake
然后安装打开软件,选择tools->how to install for command line use. 选择其中一个命令进行运行。下面通过cmake软件进行cmake安装。失败信息是目标文章拒绝访问。安装brew失败,未解决。
2024-02-15 17:12:35 1067 1
原创 C++存储区
变量的存储区域决定了其生命周期、作用域和存储方式。栈上的变量在离开其作用域时自动销毁,而堆上的变量需要手动管理内存。全局变量和静态变量在整个程序运行周期内存在,而常量通常存储在只读的区域。用于动态分配内存,即运行时由程序员手动分配和释放的区域。变量的生命周期与其所在的函数或代码块的执行周期相匹配。存储局部变量和函数调用的信息。存储全局变量、静态变量和常量。存储在程序的全局数据区域。存储在程序的全局数据区域。通常是只读的,不允许修改。存储在程序的全局数据区域。存储常量,如字符串常量。存储程序的执行代码。
2024-02-08 18:39:46 192
原创 leetcode之LCP 30. 魔塔游戏
数组的整体结果不变。只注意血量为0的时候就要开始往后移动,但是移动谁呢,移动之前血量最低的就行了。
2024-02-07 11:17:59 288 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人