C++ 黑魔法初探:boost 库 is_detected
C++ 黑魔法初探:boost 库 is_detected
|
前言在阅读 github 上一些库的源代码时,看到一个很有趣的实现,如何检测一个类型是否是容器,源代码是通过检测类型是否支持 begin、end、size 操作来判断。由于标准库并没有 is_detected 这一实现,所以库作者基本是把 boost 库中的源代码搬了过来,第一次看到时还花了好久时间
C++ 可调用对象返回值类型推导
C++ 可调用对象返回值类型推导
|
类型萃取获得返回值类型这里用到了模板元编程技术,标准库中有现成的实现 std::result_of,原理是这样的:我们通过 decltype(f(args)) 来获得返回类型,那么就得有函数 f 的类型和参数 args 的类型类型萃取设计如下:// 不会使用该版本template<typena
Randomized-Select 算法详解
Randomized-Select 算法详解
|
Randomized-Select 算法详解前言在一个长为 n 的无序序列中,查找第 k 个大或小的元素,Randomized-Select 算法可以实现时间复杂度为 O(n) 的查找。在网上查了一些资料,都没有讲解为什么该算法时间复杂度是 O(n),于是看了《算法导论》,看了原版的推导和证明,这里
十大经典排序算法(C++实现)
十大经典排序算法(C++实现)
|
前言目前 Leetcode 刷题刷到排序算法部分,回顾一下十大经典排序算法。1. 冒泡排序特性说明时间复杂度O(n^2)有序时最好 O(n)空间复杂度O(1)稳定性稳定排序细节:如果有序,直接返回void bubble_sort(vector<int> &nums){ bo
C++ 头文件的循环引用
C++ 头文件的循环引用
|
C++ |
C++
0 评论
前言在实现设计模式中的观察者模式时,想要完成的功能是:被观察者数据改变时通知观察者,而观察者能够知悉是哪些数据发生了改变(被观察者作为参数传递)这里就产生了循环引用,被观察者中包含了观察者,而观察者也包含了被观察者,导致出错。解决方案:前向声明在形如以下的循环引用结构,可以通过前向声明解决// A.
Tiny-JSON 项目记录
Tiny-JSON 项目记录
|
Tiny-JSON 项目问题记录前言Tiny-JSON 项目过程中所遇到的问题,做一个简单的整理。switch 中的变量在 switch 的 case 中定义变量,报 crosses initialization of 'xxx'原因:在 case 中定义变量,如果没有大括号,则所有 case 都能
JSON 入门
JSON 入门
|
JSON 入门什么是 JSONJSON 是一种纯字符串形式的数据,是一种开放的、轻量级的数据交换格式,广泛地应用在网络中进行数据传输。JSON 中只有两种方式表示数据:Object:键值对的集合,用 { } 定义,以 key: value 的形式表示键值对,键值对间用 , 分隔Array:值的有序集
C++ 继承中方法调用总结
C++ 继承中方法调用总结
|
C++ |
0 评论
C++ 继承中方法调用总结前言C++ 的继承和多态无疑是一个非常有用的特性,但在实际使用过程中,有一些新手十分容易犯的错误,这里做个整理和总结,列举了继承下各种函数声明及实际调用情况。类说明用于演示的类如下:class Father{public:    void speak();};class S
《网络是怎样连接的》学习总结
《网络是怎样连接的》学习总结
|
前言这本书从一个比较宏观的视角,解释了一个网络包从发送到接收的全过程,虽然此前也学过《计算机网络》,但《计算机网络》对每个细节解释的更加详尽,在学习时容易迷失在具体的细节里,觉得枯燥无味,对理论知识也难以联系到实际。所以我觉得本书适合作为计算机网络的入门书籍,从宏观的角度对网络有一个直观的了解,对于
CMake 和 Makefile 之光速入门
CMake 和 Makefile 之光速入门
|
0 评论
CMake 和 Makefile 之光速入门Makefile 由来在使用编译器进行编译时,例如 g++ main.cpp source1.cpp source2.cpp -o main,将编译三个 cpp 文件,并生成一个 main.exe 的可执行文件。编译命令非常简单,但这在编译文件非常多时,就