![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
C++中的各种小tips
hero_th
当打之年,感恩一切!
展开
-
[零声教育] C++高性能日志课程总结
二者均都有缓冲区,系统调用write的效率取决于你buf的大小和你要写入的总数量,如果buf太小,你进入内核空间的次数增大,效率就低下。当 buf_size 设置的比较小的时候,缓冲区会容易写满,频繁使用系统调用,OS会进行变态,增加耗时。日志写满一个缓存队列的话,才去notify 日志读取线程将日志从缓存队列中取出然后写入,然后下一条日志写到另外一个缓存队列中去。异步日志的高性能:支持批量写入,日志达到一定量的时候,才会调用write去写入文件。而不是一个日志写到缓存队列中就通知线程进行日志读取。原创 2024-03-11 12:57:28 · 589 阅读 · 0 评论 -
[Linux网络编程] I/O 模型代码演示
实现异步读取文件的方式。在异步读取文件的情况下,程序可以在等待文件读取完成的同时执行其他任务。展示了同步读取文件的方式,而。原创 2024-03-11 12:54:40 · 139 阅读 · 0 评论 -
[Ubuntu] gdb安装、编译及使用
centossudo yum updatesudo yum install gdb ubuntusudo apt updatesudo apt install gdb编译准备正常编译,不带有gdb调试信息g++ test.cpp -o test加入gdb调试信息g++ -g test.cpp -o test使用gdb1. 启动gdbgdb 可执行程序gdb test2. 命令行调试1. 启动&退出命令 解释 run 缩写 ,如果程序中原创 2024-03-08 12:39:46 · 1680 阅读 · 0 评论 -
[c++] operator 运算符重载
这种赋值功能,这个语句的本质就是操作符重载这个函数做左值,当函数返回值做左值时需要返回引用类型,所以我们返回值设计为了int&假设我们有一个自己定义的数组Array,我们需要进行[]操作符重载以实现 Array[i]数组元素快速访问 和 Array[i]=9 快速修改等操作。我们以成员函数的方式进行重载,所以对象直接通过this指针隐式的传递了,参数只需要有一个int,因为我们业务中的索引是通过int类型;当运算符的左边是类时,我们推荐使用成员函数重载,因为有一个参数已经被this指针包含了。原创 2024-02-08 11:14:56 · 283 阅读 · 0 评论 -
【Solved】:autoreconf: error: automake failed with exit status: 1 error
【代码】【Solved】:autoreconf: error: automake failed with exit status: 1 error。原创 2023-11-14 22:00:52 · 740 阅读 · 0 评论 -
C++ 命名空间(namespace)
int a = 10;return 0;//10命名空间只能在全局范围内定义。原创 2023-10-22 15:19:27 · 225 阅读 · 0 评论 -
排序算法(stable_sort(), sort())
sort函数我相信大家都不陌生,今天介绍一个新的排序算法stable_sort。原创 2023-10-13 13:26:40 · 565 阅读 · 0 评论 -
C++ vector 自定义排序规则(vector<vector<int>>、vector<pair<int,int>>)
平时的编译器里面自己写的时候 cmp函数前面加不加static都行,但是leetcode刷题时,代码还有实现都是写在类里面的,cmp函数前面一定要加上static修饰。因此建议所有的返回类型都为static bool 类型。这里不能使用C++11中的auto关键词进行自动类型推导C++ sort函数自定义cmp函数中参数带&符号//如果第一元素相等,则比较第二元素。原创 2023-10-11 22:52:30 · 4978 阅读 · 0 评论 -
C++ sort函数自定义cmp函数中参数带&符号
今天在刷leetcode每日一题的时候,用到了sort函数且需要自定义cmp排序规则。然后发现答案几乎是前篇一律:cmp函数中参数都带有&,并且使用const关键字修饰。这不禁让我产生了疑惑,并搜集了网上大量资料加上自己的实践,与君共享。对于初学者,使用cmp时,一般是这样的但是在刷leetcode的时候,更多的却是。原创 2023-10-11 22:21:00 · 395 阅读 · 0 评论 -
Qt Creator 使用技巧
使用技巧功能快捷键解释Switch Header/SourceF4在同名的头文件和源程序文件之间切换Follow Symbol Under CursorF2变量:跳转到声明;函数:声明和定义切换Refactor Rename Symbol Under CursorCtrl+Shift+R改名称,将替换所有用到这个符号的地方RefactorAdd Definition in .cpp在函数原型上右键选择refactor为函数原型在cpp文件中生成函数体原创 2023-10-02 20:18:20 · 329 阅读 · 0 评论 -
C++ 迭代器(iterator)
循环过程终止时,mid或者等于end或者指向要找的元素。如果说mid等于end,说说明text中没有我们要找的元素。任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。或者是两个迭代器相减,就可以得到中间隔了多少个元素。举个例子,下面利用迭代器实现。原创 2023-09-30 12:36:17 · 237 阅读 · 0 评论 -
C++ Primer----1.5类简介 章节练习
【代码】C++ Primer----1.5类简介 章节练习。原创 2023-09-26 22:42:17 · 95 阅读 · 0 评论 -
Clion 中 C++ 输入终止符
【代码】Clion 中 C++ 输入终止符。原创 2023-09-26 22:35:03 · 264 阅读 · 0 评论 -
经典排序算法
冒泡排序idea每次交换相邻的两个元素,一趟排序过程下来后,最大的一个数排到了最后一位。第二趟下来之后,第二大的数就排到了倒数第二位。因此,冒泡排序需要进行n-1趟。如图:Codevoid bubble_sort(int a[],int n){ for(int i=0;i<n;i++){ for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ int tmp = a[j]; a[j]=a[j+1]; a[j原创 2022-01-03 20:31:46 · 516 阅读 · 0 评论 -
C/C++ 文件读取操作 竞赛篇
Open fileFILE *fp = fopen("file_name","mode")mode参数解释:“r”:以只读的形式打开文本文件(不存在则出错)“w”:以只写的形式打开文本文件(若不存在则新建,反之,则从文件起始位置写,覆盖原内容)“a”:以追加的形式打开文本文件(若不存在,则新建;反之,在原文件后追加)“r+”:以读写的形式打开文本文件(读时,从头开始;写时,新数据只覆盖所占的空间)“wb”:以只写的形式打开二进制文件“rb”:以只读的形式打开二进制文件“ab”:以追加的形原创 2022-01-02 10:50:13 · 1022 阅读 · 0 评论 -
C++ string , int 之间相互转换
int -> stringint num = 10 ;string str = to_string(num);cout<<str; //"10"string -> intstring s= "10" ;int num = atoi(s.c_str());cout<<num; //10原创 2021-07-25 13:14:43 · 86 阅读 · 0 评论 -
C++ char,int 之间的相互转换
char -> intchar word = 'a';int num = word - '0'; //49char strNum = '9';num = strNum - '0'; //9int -> charcout<<9+'0'; //'9'cout<<0+'0'; //'0'原创 2021-07-25 12:36:44 · 120 阅读 · 0 评论 -
C++ 中使用哈希表(unordered_map)的常用操作
//建立基本数据类型的哈希表unordered_map<int,int> m; //<string,string>,<char,char>//向哈希表中添加元素1.insert 函数m.insert(pair<int,int>(1, 10));m.insert(pair<int,int>(2, 20));2.用数组方法直接添加m[3]=30;m[4]=40;//begin(),end()m.begin() //指向哈希表的第原创 2021-01-30 11:22:52 · 29446 阅读 · 12 评论 -
unordered_set/unordered_map 增删查操作
unordered_set//引入头文件#include<unordered_set>//创建unordered_set<int> num;//添加num.insert(3);//删除num.erase(3);//查找if(num.find(3)==num.end()) cout<<"3 is not found!";unordered_map//引入头文件#include<unordered_map>//创建unor原创 2021-05-25 15:41:33 · 595 阅读 · 1 评论 -
gcd 最大公约数 和 lcm 最小公倍数
gcd1.int gcd(int a,int b){ if(!b) return a; return gcd(b,a%b); } 2.int gcd(int a,int b){ return b?gcd(b,a%b):a; } lcmint lcm(int a, int b){ return a * b / gcd(a, b);}原创 2021-04-17 15:04:49 · 111 阅读 · 0 评论 -
归并排序、求逆序对
归并排序(mergesort)归并排序采用分治的思想:先将#include<iostream>using namespace std;int a[10001];int b[10001];int ans;void mergesort(int l,int r){ if(l == r) return ; int mid=(l+r)/2; mergesort(l,mid); mergesort(mid+1,r); int i=l,j=mid+1,p=l; while(i原创 2021-04-06 10:42:52 · 140 阅读 · 0 评论 -
C++ 链表结构的常用操作(单链表)
单链表的定义struct listnode{ int data; listnode *next;}listnode *head=new listnode;//定义链表的头指针listnode *p=NULL; //初始化指针变量就像这样,一个基本的单链表就已经构建好了。//这样表示建立一个哑结点prehead,指向头结点的前一个位置listnode *prehead=new listnode(-1);单链表的操作1.查找“数据域满足一定条件的结点”//在头指针有数据的前提下(以下原创 2021-01-31 15:16:01 · 376 阅读 · 2 评论 -
二叉树的遍历-C++
(文章制作不易,请点下你的小红心再走吧!)根据节点在其中的访问次序,我们二叉树的遍历方式有三种,分别是先序遍历,中序遍历,后序遍历。先我们需要了解什么是二叉树的先序遍历,中序遍历,后序遍历先序遍历:按照访问根节点——左子树——右子树的方式遍历这棵树中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树后序遍历:按照访问左子树——右子树——根节点的方式遍历这棵树假设树节点如下:struct TreeNode{ int val; TreeNode *left; Tre原创 2021-03-24 14:45:56 · 93 阅读 · 0 评论 -
C++中 (n&1)和(1&n) 分别表示什么意思?
n&1这里 n&1 就是——判断n是否为奇数因为n为奇数时,对应的二进制数最低位一定为1,n&1的结果就是1n为偶数时,相应的最低位为0,n&1的结果就是0.1&n这里的 1&n 就是:检查二进制n的最低位,若为1,则1&n的结果就是1,若不为1,则1&n的结果就是0....原创 2021-03-19 19:08:47 · 9665 阅读 · 4 评论