![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
现代C++
文章平均质量分 83
BearPot
你太容易因为别人优秀而焦虑 你需要的是平静的把自己的事做好
个人网站:http://www.potba.cn/
展开
-
手撕LFU缓存
为了方便操作,给双向链表加上了虚拟的头结点和尾结点,并在初始化的时候首尾相接。因为LFU多了频率,所以需要重构结点,,就不像LRU那个一样用pair对组了。这里需要用到的有,插入,删除结点,以及链表判空,和返回链表最后一个尾结点。所以针对LRU的模仿写法,我就直接用STL的list去做。为了确定最不常使用的键,可以为缓存中的每个键维护一个。下面是我们自己实现的双向循环链表的写法,代替list。是LRU的升级,多了一个访问次数的维度。使用计数最小的键是最久未使用的键。操作,使用计数器的值将会递增。原创 2023-08-15 18:59:20 · 171 阅读 · 0 评论 -
有关bind一些困惑解答
绑定成员函数时,需要传入成员函数的指针(或可调用对象)、成员函数所属的对象(或指向该对象的指针)、以及任何要为成员函数提供的参数。通过源码中的模板函数重载选择正确的实现,并返回创建的绑定对象。对于&a和a都是可以正确编译执行,结果正确,往常我总是用&a的写法,传的是指针进去,所以见到绑定成员函数,第二个参数传的是a,本身对象而感到困惑。(而不是对象的指针或引用),但这个代码仍然能够编译和运行,并且没有出现错误。的引用和修饰符,以便获得准确的函数类型。函数的参数可以接收对象和对象的指针(作为左值引用)原创 2023-07-29 11:11:58 · 196 阅读 · 0 评论 -
现代C++智能指针改写
对于真正的shared的计数类,里面有个ptr指针和两个引用计数的,一个use保证shared_ptr,一个weeks保证week_ptr ,这里实现简单引用计数思路就行,不按照源码完整的设计。转移构造函数模板的作用是扩展了`smart_ptr`的移动构造函数的能力,使得可以从其他类型的`smart_ptr`实例中转移所有权。对于上面的unique_ptr的板子加上引用计数,改成shared_ptr对象类。对这一版的c++跟进,加入auto和unique的ptr。原创 2023-07-11 11:43:15 · 234 阅读 · 0 评论 -
对于生产者消费者/shutdown/close的补充
一点补充写一个循环队列用信号量去做生产者消费者,一个判空,一个判满,一个互斥锁(这个锁也能用信号量 去表示,比如0代表加锁着,1代表锁释放了 -》后面就叫做信号量锁)流程:先对空/满进行pv操作,在对互斥锁/信号量表示的锁,进行加锁/解锁如果先操作锁,再操作信号量会引起死锁用条件变量的话先操作lock锁,再对cond条件变量进行while wait,再unlock,最后notify。原创 2023-08-12 14:52:38 · 167 阅读 · 0 评论 -
C++的对象优化经验
而对于已有对象进行构造赋值的时候,就是构造临时对象,然后调用赋值语句这个~Test就是产生的临时对象Test(20)的析构指针不要指向临时对象,因为临时对象会析构,指针指向一个已经析构的对象,这样不安全引用可以指向临时对象,因为是别名所以指针这种都是要new一个出来,最后delete堆上分配的内存,不delete,是不会自动析构的,会泄漏内存对于vector的push_back,你给他传左值,他就调左值的拷贝构造,你给他传右值,就会调右值的拷贝构造.vector怎么实现的呢?原创 2023-07-23 20:09:35 · 217 阅读 · 0 评论 -
stringstream的使用
写到290题使用stringstream简化步骤,学习一下使用库定义了三种类:istringstream、ostringstream、stringstream 主要用来进行数据类型转换,比如可以将一个int类型的对象存入流中,然后经过流赋值给一个string的对象中,从而实现了int到string的转变,由于 使用 string 对象来代替字符数组,就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问原创 2023-07-12 22:30:33 · 533 阅读 · 0 评论