tuple sum

tuple sum 遍历std::tuple #include <tuple> #include <iostream>

using std::cout; using std::make_tuple;

template<typename T> std::enab… ...更多

六月 04, 2022 [C/C++] #C++
coding variable

coding variable 记录常用变量名 variable name ceil floor round trancate trim below above foo bar tmp begin end start stop final finish forward back front back… ...更多

六月 03, 2022 [C/C++] #C++ #命名
PIMPL 模式

PIMPL 模式 PIMPL:很实用的一种基础模式。 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implementation)是通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏。 PIMPL的优点: 1)降低模块的耦合。因为隐藏… ...更多

六月 03, 2022 [C/C++] #C++
cxx11内存顺序

cxx11内存顺序 背景 x86_64和Sparc是强顺序模型(Total Store Order),这是一种接近程序顺序的顺序模型。所谓Total,就是说,内存(在写操作上)是有一个全局的顺序的(所有人看到的一样的顺序), 就好像在内存上的每个Store动作必须有一个排队,一个弄完才轮到另一个,这… ...更多

六月 01, 2022 [C/C++] #C++ #内存模型
C++ 内存顺序 (Memory Order)

内存顺序问题有两个来源:编译器优化可能改变代码中读写指令的顺序;CPU 在运行时也可能重排指令(如 Tomasulo 算法)。单线程或使用 Mutex/Semaphore 时,编译器和 CPU 保证语义一致,开发者无需关心内存顺序;但当使用原子操作进行无锁编程时,内存模型的抽象被打破,开发者必须显式规约。 ...更多

六月 01, 2022 [C/C++] #C++ #内存模型 #并发
内存顺序(Memory Order)

内存顺序(Memory Order) 内存顺序 内存顺序,通俗地讲,是关于代码编译成机器指令后的执行顺序问题。内存顺序和编译器、硬件架构密切相关。那为什么会产生内存顺序问题呢?有两方面原因: 一方面,编译器为了优化程序性能,不会完全按照开发者写的代码的顺序来生成机器指令; 另一方面,在程序运行时,为… ...更多

六月 01, 2022 [C/C++] #C++ #内存模型
shared_ptr 和make_shared 介绍

shared_ptr 和make_shared 介绍 条款21:尽量使用std::make_unique和std::make_shared而不直接使用new std::make_unique 和 std::make_shared是三个make函数中的两个,make函数用来把一个任意参数的集合完美转移… ...更多

五月 30, 2022 [C/C++] #C++
为什么不提倡使用vector

为什么不提倡使用vector 为什么不提倡使用vector<bool> vector<bool>并不是一个STL容器,不是一个STL容器,不是一个STL容器!首先vector<bool> 并不是一个通常意义上的vector容器,这个源自于历史遗留问题。 早在C++… ...更多

五月 18, 2022 [C/C++] #C++
二叉树后序遍历

二叉树后序遍历 二叉树的后序遍历算法比较难,尤其是非递归。但是后序遍历的应用最广泛,最容易出现算法题,因此一定要牢牢掌握。其中迭代的方法又较递归的方法快,但是也是非常令人头疼的一件事。 1.递归算法 public void postOrderRecur(TreeNode root){ if(… ...更多

五月 18, 2022 [算法与数学] #算法与数据结构
lock free vs wait free

lock free vs wait free 在提到Concurrent Non-blocking算法的时候,都会遇到对无锁算法的无锁程度理解. 什么是wait-free和lock-free 所谓lock-free和wait-free算法是指对于共享的数据并非对其加锁来控制访问,而是多个线程并行的访… ...更多

五月 10, 2022 [C/C++] #C++
gdb基础

gdb基础 Debug是啥? Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序 Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用 本地运行没问题,更换服务器就跑不起来 这个问题就是Debug版本带了一… ...更多

四月 08, 2022 [C/C++] #gdb
stdcall和cdecl

stdcall和cdecl 概念

stdcall调用 stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,由调用者完成压栈操作,被调函数自身在返回前清空堆栈。 WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题: WINAPI _stdcall … ...更多

三月 20, 2022 [C/C++] #C++
go certificate signed报错

go certificate signed报错 CA证书 数字证书主要用来做签名认证,保证了信息和数据的完整性和安全性 但是在开发过程中经常发生内网环境的证书过期,导致依赖文件无法访问,编译报错 这里记录一下直接用http不加密的方式下载依赖文件 go 主要有几个环境变量, 这样访问这些网址时就会用… ...更多

三月 14, 2022 [网络与安全] #openssl #Git
哪些场景应该用emplace_back

哪些场景应该用emplace_back emplace的插入原理 当调用push或insert成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中。而当我们调用一个emplace成员函数时,则是将参数传递给元素类型的构造函数。emplace成员使用这些参数在容器管理的内存空间中直接构造… ...更多

三月 14, 2022 [C/C++] #C++
零宽断言

零宽断言 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,它们像 \b ^ $ < > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应… ...更多

三月 14, 2022 [Linux 与系统] #grep
markdown-preview

markdown-preview emacs markdown preview 直接上插件 grip-mode插件依赖grip python3 -m pip install grip

之后使用use-package安装grip-mode, 这样在编辑markdown文件是就自动用浏览器打开预览了 … ...更多

三月 13, 2022 [杂项]