
C/C++
Futuroscopeaaa
Hi hi hi!!!
展开
-
二叉树的各种遍历
#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <vector>#include <stack>#include <queue>using namespace std;#define null 0x3f3f3f3fstruct TreeNode { int val; TreeNode* left; TreeNode* right; explicit Tree原创 2021-08-11 20:55:36 · 202 阅读 · 0 评论 -
宏定义++x*y++的计算过程
今天在做爱奇艺笔试的时候,有一个选择题大概如下:#define mul(x, y) ++x*y++int main() { int a = 2; int b = 4; int c = 8; printf("%d", mul(a + b, b + c)); return 0;}问:输出是多少?27那么是怎么来的呢?其实这里考察的是define的使用,define定义的宏只是简单的文本替换,所以mul(a+b, b+c)等价于++a+b*b+c++,这样就知道结果了。计算步原创 2021-08-01 19:52:29 · 1469 阅读 · 0 评论 -
`implicit_cast`与`down_cast`的使用
在看muduo源码的时候看到了implicit_cast与down_cast,这里顺便做个笔记。implicit_cast和down_cast用在有继承关系的类间转换;implicit_cast用于向上转型(子类指针–>父类指针);down_cast用于向下类型转换(父类指针–>子类指针);示例:#include <iostream>#ifndef NDEBUG#include <cassert>#endifusing namespace s原创 2021-07-25 14:11:40 · 654 阅读 · 1 评论 -
C++简化管理内存的方法
智能指针(存在的问题:循环引用,使用shared_ptr和weak_ptr配合解决);QT中的方法,将堆中分配的内存组成森林,然后删除根节点的时候级联删除所有子节点(存在的问题:对异步的支持不友好,因为你不能确定实际调用的时候,指针指向的东东是否还健在,但如果在异步调用的时候,只要保证用到的东西在实际调用前不会被干掉就行)一个Qt中的例子:#include <iostream>#include <string>#include <vector>#inc..原创 2021-07-20 17:07:58 · 194 阅读 · 0 评论 -
TopK的问题及代码实现
TopK的问题在面试的时候经常出现,下面根据参考博客的理论来实现:参考:【1】拜托,面试别再问我TopK了!!!【2】Leetcode 215. 数组中的第K个最大元素代码实现:#include <iostream>#include <vector>#include <queue>#include <ctime>#include <random>#include <chrono>#include <fun原创 2021-07-03 18:51:09 · 312 阅读 · 0 评论 -
理解`atomic_flag`的用法
C++11在实现自旋锁时,一般会用atomic_flag来实现,它有两个成员函数:test_and_set()和clear(),看cppreference上的解释看了一头雾水,所以自己在vs里debug了一下。#include <iostream>#include <atomic>using namespace std;int main() { std::atomic_flag flag{ ATOMIC_FLAG_INIT }; cout << flag.原创 2021-06-23 21:14:33 · 1395 阅读 · 1 评论 -
Leetcode中使用数组创建二叉树
Leetcode中树的题目大多是输入数组的,而在debug的时候还是会有点问题的,所以就自己写了一个通过数组创建二叉树的代码,如下:#include <iostream>#include <vector>using namespace std;#define null INT_MIN / 2 // null 可自己按题目定义/// Leetcode中树节点的结构体struct TreeNode { int val; TreeNode *left; Tre原创 2021-05-11 15:36:45 · 972 阅读 · 2 评论 -
Linux网络编程(一):从一个简单的程序开始
看了很久Linux网络编程,代码都基本能看懂,但是自己一写就废,菜是原罪/(ㄒoㄒ)/~~,所以准备写一个系列关于自己学习Linux网络编程的过程。说明:之后的开发环境如下:系统: Ubuntu 20.04.1 LTS语言:C/C++编译器:g++IED:CLion 2020.2.10. 从一个简单的程序开始0.1 服务器接收需求:实现服务器接收第一个客户端发送过来的第一个数据,将其打印后关闭连接,并退出程序。服务器端代码实现如下:#include <cstdio>原创 2021-04-26 21:21:03 · 291 阅读 · 0 评论 -
共享指针的实现
参考cplusplus.com中的api,实现共享指针的部分功能。#include <cassert>#include <memory>template <typename T>class SharedPointer { public: /// @brief default constructor(default (1)) /// Usage: SharedPointer<T> sptr; /// cout <<原创 2021-04-18 15:16:11 · 419 阅读 · 0 评论 -
解决CLion导入第三方头文件后include头文件not found
0. 问题描述最近在看陈硕大神的Muduo网络库,但是在CLion上试验的时候出了些问题。问题如下:(1)如何编写CMakeLists.txt?(2)导入第三方头文件后,CLion中include这些头文件显示红色下划线(file not found)?1. 问题解决1.1 编写CMakeLists.txt按照官方的文档,将从github下载下来的项目编译后,得到两个文件夹:{your-path}/build/release-install-cpp11和{your-path}/build/rel原创 2021-04-15 19:59:44 · 9712 阅读 · 7 评论 -
googletest的Demo
Google Test框架的一个例子(可能项目结构不太科学)。具体可见:GoogleTestDemo步骤:编写功能的源码,全部写在src/下(可能需要修改src/CMakeLists.txt);从Google Test下载最新的版本,解压后将其放到test目录下(如项目中的test/googletest);修改test/CMakeLists.txt,如下:cmake_minimum_required(VERSION 3.16)# 项目名(改成自己的)set(PROJECT_N原创 2021-04-02 21:43:48 · 251 阅读 · 0 评论 -
CLion中使用线程库`pthread.h`报错
问题:在CLion中使用pthread.h报错:make[3]: *** [CMakeFiles/TinyWebServer.dir/build.make:84: xxx] Error 1make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/xxx.dir/all] Error 2make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/xxx.dir/rule] Error 2make: *** [Mak.原创 2021-01-24 15:30:53 · 754 阅读 · 0 评论 -
C++中自增操作符的重载:operator++()与operator(int)
做个实验就明白了:#include <iostream>#include <utility>class Int {public: explicit Int(int i_) : i(i_){} Int operator++(int inc) { // 后置 std::cout << "后置" << std::endl; Int tmp = *this; i += 1; return tmp; } Int& operat原创 2021-01-19 17:45:22 · 1742 阅读 · 0 评论 -
Qt中QTreeView显示Json格式的文件目录结构并获取绝对路径
Qt中QTreeView显示Json格式的文件目录结构并获取绝对路径1.QTreeView显示JsonQTreeView显示Json参考这里。2. 点击事件获取绝对路径比如下图中,点击city,路径应该是address/city。下面是添加点击事件,获取绝对路径: QObject::connect(view, &QTreeView::pressed, [=](const QModelIndex &index){ QStringList absPath;原创 2020-09-17 11:34:14 · 1640 阅读 · 2 评论 -
C中sizeof()和strlen()的区别
C中sizeof()和strlen()的区别在学Linux服务器端编程的时候,总是被sizeof(buf)、sizeof(buf)-1、strlen(buf)、strlen(buf)+1搞晕,在这里总结一下。因为strlen()是一个函数,参数只能是char*类型,而sizeof()是一个单目运算符,它的参数可以是数组、指针、类型、对象、函数等等,所以这里分两种情况分别说:第一种是字符串情况下,strlen()和sizeof()都可以用;第二种情况是其他类型下,只能用sizeof()。1 字符串情况下原创 2020-08-21 15:34:51 · 1613 阅读 · 0 评论 -
C++基础
C++基础笔记参考:huihui/interview1. const的使用2. C++面向对象特性c++的OOP特性包括封装、继承、多态,huihui/interview中的那张图挺直观的,这里直接贴过来。其中最复杂的便是多态,所以接下来主要就讲讲多态。2.1 封装靠public、protected、private这三个来控制成员的访问权限来达到封装的特性。public成员:可以被任意实体访问;protected成员:只允许本类和子类的成员函数访问;private成员:只允许本类的成员原创 2020-07-31 21:53:40 · 169 阅读 · 0 评论