C++
文章平均质量分 62
单林敏
心外无物,知行合一
CSDN 做为自己的简要易忘小知识点的记录,而自己的感想和长文一般发布在自己的个人blog,网址如下:
https://www.wolfdan.cn/
展开
-
vscode-cpp IntelliSense解析开发包到系统路径而非指定的项目路径原因探索以及解决方案
因为确实**会进行递归操作,于是猜测是level的包递归路径太深时,可能会导致 IntelliSense 的性能下降或者缓存不足,于是导致其无法正确地解析代码,导致对于 includePath 支持的内容有些折中,所以最终导致出现较深的本地目录只有在精确命名时才能找到,否则认为本地没有,于是去找系统目录,发现系统目录有,于是显示系统目录的leveldb原创 2023-03-19 18:35:35 · 1523 阅读 · 2 评论 -
不用共享内存来通信,而用通信来共享内存的思考探索
go之所以不用共享内存来通信,而用通信来共享内存,是因为其协程之间都在一个进程里面,那么管道的读取性能就很好。而如果是进程间的通信,很有可能会出现高性能进程间管道性能还是远不如共享内存的情况出现。因此和分布式存储中常用的用共享内存来代替rpc调用优化通信效率刚好是相反的。原创 2023-02-26 15:09:48 · 263 阅读 · 0 评论 -
小心weak_ptr的lock()生成的临时shared_ptr导致reset释放不掉内存
因为 weak_ptr 不会增加共享指针的引用计数,所以当共享指针释放内存时,weak_ptr 也会失效,无法通过 weak_ptr 访问内存。weak_ptr 是一种智能指针类型,它指向一个 shared_ptr 指向的内存,但不会增加共享指针的引用计数。访问 weak_ptr 指向的内存:std::shared_ptr sptr = wptr.lock();具体原因是: shared_ptr sptr = wptr.lock();会新建一个新的对应内存的引用,所以导致内存块不释放原创 2022-12-09 18:27:52 · 1807 阅读 · 0 评论 -
brpc第一周学习分享
寻求帮助由于自己第一次读开源代码,所以完全没有方法,所以第一步是疯狂Googlebrpc学习最佳实践如何阅读源代码最终找到一篇比较好的文章如何阅读一份源代码?制定计划目前自己的大计划是一年能够改写brpc所以小计划是当前一个月先搞清楚brpc的基本框架,了解基本结构制定以上计划的原因如下:自己第一次读大型开源项目这个brpc涉及的知识点较多,工程庞大,而且十分经典实用,所以应该深入学习第一周实践阅读技巧https://www.codedump.info/post/202006原创 2020-10-04 13:21:34 · 753 阅读 · 0 评论 -
brpc第二三周学习分享
针对于client端的学习https://github.com/apache/incubator-brpc/blob/master/docs/cn/client.md于自己而言的新概念Join可用来实现“半同步”访问:即等待多个异步访问完成。TODO未懂_连接方式三种连接方式还是有点迷糊…所以还是要以后继续看___学习异步重点知识在异步访问中,RPC调用结束并不意味着RPC整个过程结束,而是在进入done->Run()时才会结束。所以这些对象不应在调用RPC后就释放,而是要在done-&原创 2020-10-17 18:00:33 · 383 阅读 · 0 评论 -
C结构体中字符串初始化
使用strdup我们定义的字符串指针是没有内存空间的,需要先申请空间之后再赋值,于是就发现了这样一个字符串函数:strdup(str);strdup()函数会计算出字符串的长度,然后调用malloc函数在堆上申请相应的空间,最后把字符串的所有字符复制到堆上i.e.#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct test_struct{ const cha原创 2020-12-11 17:13:19 · 2387 阅读 · 1 评论 -
指向指针数组的指针
指向指针数组的指针#define SIZE 1024// 先声明一个指向指针的指针buffdesc_t * * point_array;// 声明一个指针数组,并且返回其指针,因此指针指向了指针数组// 即 指向指针数组的指针point_array = malloc(SIZE * sizeof(struct buffdesc *));具体探索小实例#include <stdio.h>#include <stdlib.h>#define likely(x)原创 2020-11-28 16:03:30 · 1060 阅读 · 0 评论 -
reference to non-static member function must be called
错误原因问题在于这cmp是一个成员函数,您需要一个指向成员的指针才能调用它。有三种方法使用为该结构定义的operator()创建一个结构struct compareFunc { inline bool operator() (const vector<int> &a, const vector<int> &b) { return (a.back() < b.back()); }};并以以下方式调用sort函数:std::so原创 2020-10-24 16:57:07 · 538 阅读 · 0 评论 -
macOS使用bits/stdc++.h
解决方案安装gcc/g++,获取安装路径## brew install gcc(安装了Xcode的跳过此步,并且启动过Xcode__第一次启动下载插件)gcc --version添加文件到安装目录的include下注意:必须是你自己的安装目录!!!cd /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bincd ../include## create bits direc原创 2020-09-20 17:40:44 · 654 阅读 · 0 评论 -
C++面试准备_面试高频知识点集
基础知识头文件的作用,里面放什么东西 -> 扩展到什么作用等C/C++ 编译采用分离编译模式。在一个项目中,有多个源文件存在,但是它们总会有一些相同的内容,比如用户自定义类型、全局变量、全局函数的声明等。将这些内容抽取出来放到头文件中,提供给各个源文件包含,就可以避免相同内容的重复书写,提高编程效率和代码安全性。所以,设立头文件的主要目的是:提供全局变量、全局函数的声明或公用数据类型的定义,从而实现分离编译和代码复用。加强类型检查,提高类型安全性。 — 相对于一个类定义在多个文件中,然后可能定原创 2020-06-14 19:48:54 · 721 阅读 · 0 评论 -
红黑树C++源码_学习笔记
声明需要结合wiki中的讲解看,此源码是对于wiki中源码的修正以及加注释,从而方便理解wiki链接: 红黑树wiki代码以及注释/*具体见:https://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91感觉源码的插入有问题,自己改了一下然后删除中情形二的代码也有问题,wiki源码自己注释反了___版本匹配错了// ```cppif(p == p->parent->leftTree) //rotate_left(p原创 2020-06-07 20:54:45 · 270 阅读 · 0 评论 -
C++面试实现string类_一种正确写法
C++ 的一个常见面试题是让你实现一个 String 类,限于时间,不可能要求具备 std::string 的功能,但至少要求能正确管理资源。具体来说:能像 int 类型那样定义变量,并且支持赋值、复制。能用作函数的参数类型及返回类型。能用作标准库容器的元素类型,即 vector/list/deque 的 value_type。(用作 std::map 的 key_type 是更进一步的要求,本文从略)。换言之,你的 String 能让以下代码编译运行通过,并且没有内存方面的错误。void f转载 2020-05-31 11:27:25 · 351 阅读 · 0 评论 -
32g_2个2t文件_qq号交集_腾讯后台场景面试题
法一布隆过滤机法二直接用bit位来枚举,假设QQ号最长11个号码,那么就是2^37的大小,就是用37位bit表示所有QQ然后我们再对应每个37bit之外用2bit记录,第一个文件和第二个文件有没有00 表示都没有10 表示仅第一个文件有01 同理仅第二个文件有11 表示两个文件都有此QQ号所以就是39个bit位,我们可以用一个int 32位,和一个char 8 位来一个记录2402^{40}240 / 282^828 = 2322^{32}232Bytes = 4GB < 32GB原创 2020-05-17 17:11:51 · 504 阅读 · 4 评论 -
VScode无法运行中文路径的cpp文件
原因这是由于调试用到的mingw中的gdb不支持中文路径!解决方案一通过手动运行编译成功的.exe文件解决方案二老老实实地用英文路径和英文命名原创 2020-04-12 16:20:30 · 4691 阅读 · 11 评论 -
null character(s) ignored
可能原因可能是由于有人使用将文件另存为16位Unicode的编辑器创建源文件引起的在这种情况下,由于使用ASCII范围内的字符的UCS16编码将使第二个字节成为空字符,因此会出现错误解决方案一通过VScode或者sublime编辑器,把文件另存为UTF-8类型解决方法二Linux端最简单的解决方案是使用iconv(Linux)转换编码iconv myfile -f UTF-16 -...原创 2020-04-12 16:07:07 · 4919 阅读 · 1 评论 -
vscode中编译c++文件No such file or directory
原因分析vscode在win下${file}等中的默认文件分隔符是\,如果你使用了bash集成终端,bash使用的文件分隔符是/,不兼容,解决方案一修改VScode的默认shell为cmd或者powershell,要用bash的时候再直接在shell中输入bash解决方案二貌似没有什么好的解决办法,有人做了个插件可以试下,可以去看看https://github.com/microsof...原创 2020-04-12 15:53:10 · 12474 阅读 · 0 评论 -
sizeof()计算嵌套结构体
学习此资料指南不用看各种头文件先从test::run2()极其前后注释看起然后如果想要深入学习,可以看test::run()中的Variadic_template实现递归复合的sizeof()求解,太细的东西暂时看不懂没关系,其实只用看数据,他就相当于run2()中的struct嵌套struct#include<bits/stdc++.h>using namespace ...原创 2020-04-10 18:23:28 · 859 阅读 · 0 评论 -
C++ 向上与向下类型转换(static_cast与dynamic_cast)
隐式转型(向上转型,即将派生类对象赋值给基类)C++允许向上转型,即将派生类的对象赋值给基类的对象是可以的,其只不过是将派生类中基类的部分直接赋给基类的对象,这称为向上转型(此处的“上”指的是基类),例如:class Base{ };class Derived : public base{ };Base* Bptr;Derived* Dptr;Bptr = Dptr; //编译正确,允...转载 2020-03-26 16:15:53 · 1628 阅读 · 0 评论 -
函数指针,指针函数,数组指针,指针数组_核心剖析
自己多次学习后的心得体会就是*的优先级比[]和()都要低,所以要是没有(*p)让其类型(句柄母体)最终成为指针的话,那么它就是句柄母体是函数或者数组下面就是指针函数,因为pfun先和()结合成为函数,然后返回值是int*整型指针再下面是指针数组,同样也是a先和()结合成为数组,然后数组和每一个元素的类型是int*整型指针int* pfun(int a,int b){};int* a[10...原创 2020-03-24 22:04:17 · 153 阅读 · 0 评论 -
深入理解指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针
指针数组表达式为:int *p[5]理解:下标运算符[ ]的优先级是要高于指针运算符*,因此p先和下标运算符结合,决定了p首先是个数组,其类型int *,表明数组的元素都是都是指针。而数组占多少个字节由数组本身决定。其实指针数组表达就是一个存放指针的数组。其图示如下:数组指针表达式为:int (*p2)[5]理解:括号运算符()的优先级是最高的,因此p2先和括号内的指针运算符*结合,因...转载 2020-03-19 17:37:52 · 206 阅读 · 0 评论 -
从String类实现中看到精髓--面向对象高级开发学习系列
声明老师说标准库的string用到太多知识点,写得太复杂,所以这里是老师自己写的一个够用的版本三个特殊函数拷贝构造,拷贝赋值,析构函数complex复数类可以直接使用编译器自动生成的拷贝构造函数而带指针的String类如果用默认的(浅拷贝),则只是拷贝指针,那么就有两个指针指向同一个数据块,还可能导致调用者原来的指针指向的地方内存泄露,这样就可能出问题,所以需要自己写深拷贝inlin...原创 2020-03-19 16:40:35 · 98 阅读 · 0 评论 -
从复数类实现中看到精髓--面向对象高级开发学习系列
声明学习材料: 侯捷老师 极客band的教程笔记使用VScode写markdown用sublime编译,因为VScode对于中文路径编译有问题用csdn来作为快速图床inline和宏inline和宏差不多,方法直接写在定义的地方是inline会很快,写在外面用inline关键字来标识,具体是否inline取决于编译器实现public,private数据和私有数据处理一般放在pr...原创 2020-03-18 19:45:34 · 160 阅读 · 0 评论 -
apue中memstr.c的究极困惑解决
这两天因为fmemopen这个函数导致自己一直很迷惑为什么memstr.c中最后一个输出就是不加null字节.在自己查看http://man7.org/linux/man-pages/man3/fmemopen.3.html的文档查看apue英文版以及苦思冥想了大概4小时之后终于找到了网上有个前辈对这里的思考Third, a null byte is written at the ...原创 2020-02-27 18:08:44 · 232 阅读 · 0 评论 -
函数指针和指针函数_整理
定义顾名思义,指针函数即返回指针的函数。其一般定义形式如下:类型名 *函数名(函数参数表列);其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。“(函数参数表列)”中的括号为函数调用运算符,在调用语句中,...转载 2020-02-23 12:04:39 · 196 阅读 · 0 评论 -
设置用户ID位是什么意思
最近在理解保存设置用户ID时,遇到一些问题,但是发现网上都没能把这个问题说清楚,通过自己的思考和查找资料,终于明白了,现在分享在这里共大家交流学习,如果有不正确的地方,欢迎指正基本概念:实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一确定的,就是登陆的用户的uid有效用户ID(EUID):用于系统决定用户对系统资源的权限。也就是说当用户做任何一个操作时,最终看...转载 2020-02-18 15:56:17 · 4631 阅读 · 0 评论 -
apue.h不存在,以及apue源码下载编译的解决方法
下载源码APUE源码下载: http://www.apuebook.com/ (选择书的版本,然后Source Code)我下载的是e3,第三版的书的源代码编译一般我们看到一个软件包,第一时间都是先读README文件,然后发现里面说得很简单,直接在软件包目录下执行make就行了wolfdan@wolfdan-PC $ cat READMERead the file called DIS...原创 2020-02-17 19:36:58 · 498 阅读 · 0 评论 -
2018多校3Problem A. Ascending Rating
HDOJ6319主要看注释(感觉发布格式环境不太顺手)/*2018年8月7日15:30:53终于读懂了这段短小精悍的代码,开始反思和复盘,以及思考自己怎么才能写出这么牛逼的代码2018年8月7日16:06:08去CSDN分享记录一下,万一帮到别人呢*/#include<cstdio>const int N=10000010;int T,n,m,k,P,Q,R...原创 2018-08-07 16:32:13 · 133 阅读 · 0 评论 -
凸包问题的快包算法代码(C语言)
二维凸包可以用来解决围栏问题、城市规划问题、聚类分析等等。原文链接:http://blog.csdn.net/bone_ace/article/details/46239187分治法时间复杂度:O(n㏒n)。思路:应用分治法思想,把一个大问题分成几个结构相同的子问题,把子问题再分成几个更小的子问题……。然后我们就能用递归的方法,分别求这些子问题的解。最后把每个子问题的解“组装”成原来...转载 2018-08-08 18:03:18 · 5269 阅读 · 7 评论 -
Cannot open include file: 'sdkddkver.h': No such file or directory
在目录C:\Program Files (x86)搜索找到sdkddkver.h复制到MinGW\include目录中即可困扰许久,结果解决方法这么简单,可以开始愉悦地使用命令行编译运行了,也可以因此配置sublime text或者VS code的编译运行C++的环境了哦...原创 2018-08-13 21:24:59 · 2397 阅读 · 0 评论 -
mingw ld.exe: cannot find的问题
## 解决方案使用其他软件下面的mingw我这里应该当年使用的是Dev-cpp这个软件所在文件夹里面的mingw原创 2018-08-14 13:46:20 · 12064 阅读 · 5 评论 -
priority_queue使用坑点和题集
2019年7月9日23:27:19 更第一波priority使用pair比较的坑点所以用pair的priority_queue只能使用struct的重载比较,why?!重载运算符的操作不能用于pair类型数据的排序,只能作用于结构体或类对象。—> 所以不能使用node型的priority_queue的函数重载操作符的方法node可以函数操作符重载pair不支持重载运算符...原创 2019-07-10 13:59:25 · 507 阅读 · 0 评论 -
cin,cin.get(),cin.getline(),putchar(),getchar(),puts(),gets()
cin,cin.get(),cin.getline():https://blog.csdn.net/a1015553840/article/details/50579396putchar(),getchar(),puts(),gets():https://www.cnblogs.com/anthow/p/3369462.html转载 2018-09-08 20:48:31 · 185 阅读 · 0 评论