- 博客(29)
- 收藏
- 关注
原创 C++: 高效使用智能指针的8个建议
智能指针是C++11提供的新特性,它基于RAII实现,可以自动管理内存资源,避免内存泄漏的发生,但是智能指针也并不是万能的,如果不正确使用智能指针,也会导致内存泄漏的发生,因此,我们需要了解如何高效使用智能指针避免一些可能的陷阱。
2024-09-18 21:16:05
838
原创 C++17: 用折叠表达式实现一个IsAllTrue函数
让我们实现一个IsAllTrue函数,支持变长参数,可传入多个表达式,必须全部计算为true,该函数才返回true。本文记录了逐步实现与优化该函数的思维链,用到了以下现代C++新特性知识,适合对C++进阶知识有一定了解的人。这样一种从实际问题来学习和运用知识的过程还是挺有趣的,特此整理分享一下。可变长参数模板 (C++11)折叠表达式 (C++17)条件编译 if constexpr (C++17)类型萃取 type traits (C++11)完美转发(C++11)结构化绑定。
2024-09-08 21:09:58
1137
原创 C++ std::shared_ptr自定义allocator引入内存池
C++ 基于std::shared_ptr引入内存池,减少动态内存分配开销。
2024-08-06 00:43:42
852
原创 C++: 16个基础的C++代码性能优化实例
近期推动项目屎山代码进行了一波性能优化,实现了较大的性能提升。这里记录了部分近期代码优化的小技巧,这些例子仅从C++语言层面进行优化,主要在于优化类设计、减少隐含函数调用、减少拷贝等,较为基础实用,但涉及的知识点并不少。本文提供了一个视角,可以帮助了解一些C++代码的不同写法性能开销差异。对于很少关注代码性能的人,或许可以看看,提升一下代码性能方面的意识,从而写出性能更高的程序。以下代码会调用一次默认构造函数,一次赋值运算符函数;Matrix m1;以下代码只会调用一次拷贝构造函数。另一个是。
2024-06-27 00:06:54
1058
原创 C++: shared_ptr是线程安全的吗
对shared_ptr进行并发拷贝,对数据指针和控制块指针仅进行读取并复制,然后对引用计数进行递增,而引用计数增加是原子操作。因此是线程安全的。
2024-06-10 23:59:38
932
原创 C++:STL源码中司空见惯的PIMPL是什么?
本文介绍了C++中PIMPL惯用法的基本用法,以及使用原始指针、std::unique_ptr和std::shared_ptr指向Implementation的区别, 以及PIMPL的优缺点。
2024-06-10 17:15:55
1411
原创 C++: unordered_map 花式插入key-value的5种方式
无意中发现等插入key-value对在C++17后竟有了超过5种方法,我们可以根据实际场景和对效率的要求,去选择不同的方法。在此不得不夸一夸C++的灵(fù)活(zá)性,不管怎么说,一点无用的知识又增加了。此外发现,Effective STL这本书中对insert()方法的介绍有些过时了。
2024-06-07 00:02:39
1475
原创 C++ : 仅添加一个引用& 就直接导致程序崩溃
不得向锁所在的作用域之外传递指针和引用,指向受保护的共享数据,无论是通过函数返回值将它们保存到对外可见的内存,还是将它们作为参数传递给使用者提供的函数。
2024-05-21 22:59:16
473
1
原创 C++: RAII是什么——使用对象来管理资源
在本文中,我们介绍了C++中的RAII技术,它是一种管理资源的方法,可以帮助我们避免内存泄漏和资源泄漏等问题。在函数中由栈管理的临时对象,在函数结束时会自动析构,从而自动释放资源,因此,我们可以。本文较为详细介绍了RAII的原理、使用方法和优点,并且通过实例讲解了RAII在C++ STL中的应用,如智能指针和互斥锁等,在最后进行了编程实践。
2023-10-29 00:47:00
4227
原创 PATB 1041 考试座位号(15)
#include <cstdio>#include <iostream>using namespace std;struct student{ char str[15]; int trys; int tests;}stu[1000];int main(){ int n,m,query,i; char s[15]; scanf("%d",&n)...
2018-02-13 15:40:32
253
原创 PATA 1009. Product of Polynomials (25)
1009. Product of Polynomials (25)时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueThis time, you are supposed to find A*B where A and B are two polynomials.Input Specification:Each input file...
2018-02-13 15:38:59
238
原创 PATB 1004 成绩排名 (20)
1004. 成绩排名 (20)时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生的姓名 学号 成绩 ... ... ......
2018-02-13 15:35:55
250
原创 PATB 1028. 人口普查(20)
1028. 人口普查(20)注意特判合理人数为0,否则格式错误。时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的...
2018-02-13 15:30:17
245
原创 PATA 1065 A+B and C (64bit)
1065. A+B and C (64bit) (20)时间限制100 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者HOU, QimingGiven three integers A, B and C in [-263, 263], you are supposed to tell whether A+B > C.Input Specification:...
2018-02-12 11:51:36
217
原创 埃氏筛素数法
从2开始枚举所有数(已知2为素数),筛去每一个素数的倍数,剩下的就都是素数。#include const int maxn = 1001; bool p[maxn] = {false}; int prime[maxn],pNum = 0;void find_prime(int n){ int i,j; for(i = 2;i < n;i++) //2为素数,已初始化,从2开始
2018-01-22 11:56:29
297
原创 随机选择算法
如何求解无序数组中第k大的数?问题:将数组划分为两个子集,元素个数分别为n1,n2,两个子集各自元素之和分别为S1,S2,使|S2-S1|尽可能大,使|n1-n2|尽可能小。求|S2-S1|。分析:仅寻找数组中第n/2大的数,将数组划分为两个集合,一个子集的元素都小于这个数,另一个子集的元素都大于这个数,而不在意子集内部的顺序,也无需关心这个数是什么。较为直接的排序的思路则是使两个子集内部
2018-01-22 10:37:05
322
原创 分数的表示和运算
分数的表示和运算#include #include //分数的表示和化简struct fraction{ int up,down;}f[2];int gcd(int a,int b){ //if(b == 0) return a; //else return gcd(b,a%b); return b==0?a:gcd(b,a%b);}fraction reduction
2018-01-22 10:27:14
342
原创 排序算法的实现
一.冒泡排序#include #include int main(){ int a[10]={5,8,16,7,9,10,14,12,2,1}; int i,j; for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(a[j]>a[j+1]) { int t=a[j]; a[j]=a[j+1]; a
2018-01-20 16:01:51
188
原创 图——广度优先遍历(邻接矩阵存储)
// Graph,BFS#include #include #include using namespace std;int graph[100][100]={0};int visited[100]={0};queue q;void Initgraph(){ int n,i; int p,q; cout<<"Input the edge num:"<<endl; ci
2017-05-08 16:42:44
1000
原创 PATB 1015. 德才论 (25)
1015. 德才论 (25)比较函数折腾好久,最后还因为cout,printf的区别而超时,超时是因为cout输出效率低。时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Li宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之...
2016-11-19 10:51:43
559
原创 PATB1018. 锤子剪刀布
时间限制100 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出...
2016-11-17 17:50:26
330
原创 PATB 1019. 数字黑洞 (20)
一个神奇的数字。时间限制100 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将...
2016-11-16 08:53:24
425
原创 常用协议的默认端口号
20 DTP FTP数据连接端口 21 PI FTP控制连接端口23 Telnet服务 25 SMTP 简单邮件传输协议(SMTP)53 domain 域名服务 80 http 用于万维网(WWW)服务的超文本传输协议(HTTP) 110 POP3 邮局协议版本3 143 IMAP 互联网消息存取协议(IMAP)
2016-11-14 12:16:40
5832
原创 统一资源定位符URL
Uniform Resource Locate——URL用途:通过URL访问web网页;通过URL使用其它的Internet应用程序,例如FTP,Telnet(远程登录服务);对应IE浏览器窗口中的地址栏。URL格式:://:/协议:指明访问不同对象所使用的应用层协议主机:信息资源所在的节点,在计算机网络中用域名地址或IP地址标识该资源所在节点的网络连接端口:用来区分不同的网络
2016-11-14 11:07:05
1331
原创 hdoj1009 FatMouse' Trade——贪心算法
贪心思路:按单位猫粮能兑换到的javaBean从大到小将组合进行排序,总是在当前兑换尽可能多的javabeans问题描述:点击打开链接 hdoj1009 FatMouse's Trade源代码:#include #include #include #include #include #include using namespace std;struct change{
2016-10-30 13:06:34
386
原创 hdoj2037 贪心算法——今年暑假不AC
所谓“贪心算法”是指:在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明)。经典问题:时间序列问题 点击打开链接 hdoj2037解题思路:按照题目尽可能多看节目的要求,在证明贪心算法在此题的适用性后,将t[i]按照结束时间e进行排序,以总是选择开始时间大于等于上一个节目的
2016-10-30 11:07:36
1680
原创 hdoj2036 改革春风吹满地——叉积
利用向量积(叉积)计算三角形的面积和多边形的面积关于叉积计算三角形面积和多边形面积Problem Description“ 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地。谢谢!(乐队奏乐)”话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟然来这么几句打油诗。好呀,老师的责任就是帮你解决问题,既然想种田,
2016-10-29 20:46:58
400
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人