c++
文章平均质量分 90
qmickecs
这个作者很懒,什么都没留下…
展开
-
STL细节之Tag Dispatching
引言在STL的设计中,对不同的容器(Container)进行某种处理往往使用的都是同一个函数,比如要将一个整型链表(std::list)或者数组里的元素划分成大于100和小于等于100两部分,直接调用std::partition()即可,非常方便。迭代器为了达到这样的效果,STL中所有容器都包含了迭代器(Iterator),都可以通过迭代器对其进行访问。正如《STL源码剖析》中所说的,迭代器就像胶水原创 2017-04-24 13:38:04 · 1642 阅读 · 1 评论 -
STL实现细节之rotate()
STL中 rotate(first, middle, last) 函数的作用是原地把容器区间 [first, middle)(左半部分) 与 [middle, last) (右半部分)的元素互换。 它的实现充分利用了不同迭代器的特性进行算法优化,从而达到最优的性能原创 2017-04-26 19:45:37 · 2664 阅读 · 0 评论 -
使用cuFFT实现大整数乘法
序言在某些场合,我们可能需要使用远超内置整型范围的整数进行运算,比如公钥加密等。如果使用最原始的竖式计算,那么时间复杂度是T(n^2),其中n是相乘的两个整数的位数。使用Karatsuba算法优化,时间复杂度可以降至T(n^{log_2 3})≈ T(n^1.585) 。而如果使用快速傅里叶变换(FFT),则可以优化到T(nlogn)原创 2017-08-23 17:53:59 · 2428 阅读 · 0 评论 -
RSA算法之实现篇(Python版)
RSA中的密钥长度指的是公钥的长度,目前主流的公钥长度为1024、2048以及4096位。由于已经有768位公钥被成功分解的先例,所以低于1024位的公钥都被认为是不安全的。而C++自带的基本类型远远无法满足RSA的运算需求,所以RSA算法的实现必须依赖于高精度整型运算。本文旨在介绍RSA算法的实现流程,不会对于涉及到的每一个算法进行深入介绍,如果需要进一步了解的可以参考本博客的其它相关文章。原创 2017-06-21 22:30:58 · 10011 阅读 · 3 评论 -
C++利用常量表达式在编译期操作字符串
在打log的时候,往往有这样的需求,要把当前代码文件的文件名打印出来。 最简单的就是输出__FILE__宏。但是__FILE__实际上是包括文件名的完整路径,比如这样:/tmp/blablabla-XXXX-YYYY-ZZZZZZ/example.cpp这样的输出太过冗长,我们需要的实际上只是example.cpp这个时候要是老老实实地调函数把example.cpp切出来当然不难,但是原创 2017-09-29 09:23:00 · 3793 阅读 · 0 评论