
C++
文章平均质量分 56
Coding_Reading
待我编码有成 娶你为妻可好
展开
-
可变参数模板实现求n个数的最小公倍数
前几天面试CVTE的时候,面试官要手撸了个题,求三个数的最小公倍数,题目很简单,当时想炫技说我可以求任意多个数的最小公倍数,还是忍住了,很长时间没看了,怕装逼失败。。。。。。 回来后简单写了下,使用variadic templates,很简单,前面博客有介绍 代码如下:/* 可变参数模板实现求n个数的最小公倍数,不考虑整形溢出 不考虑传入的b为0*/ #include <...原创 2018-03-26 11:00:14 · 262 阅读 · 0 评论 -
Variadic templates
Variadic Templates可变参数模板,函数的参数可以有任意多个,参数的类型任意1. 实现函数递归调用实现打印任意多个不同类型参数#include <iostream>using namespace std;//无参数版本void print() {}//n+1 个参数版本 template <class T, class... Types>void print(const T&原创 2017-12-11 18:27:35 · 370 阅读 · 0 评论 -
STL源码剖析——RB_TREE
花了差不多一个星期的时间读完了STL红黑树的实现,并凭理解自己写了出来 参考了《算法导论》,教你透彻了解红黑树,强烈推荐,《STL源码剖析》 记录下自己的理解RB_TREE红黑树优点: 与BST相比插入,查找,删除在最坏情况下的复杂度仍为O(lgn),相比BST应用范围更广 STL容器set,map都以红黑树为底层容器实现,Linux进程调度算法也用红黑树实现四种性质: 1. 每个结点要原创 2017-12-09 20:19:01 · 414 阅读 · 0 评论 -
=default, =delete
=default, =delete=default如果自己定义了一个ctor,那么编译器就不会再合成一个default ctor 如果强制加上=default, 编译器就会合成一个default ctor=delete禁止编译器合成class Test {public: Test(int i, int j):d1(i), d2(j) {} //默认构造函数 Te原创 2017-12-05 18:02:11 · 341 阅读 · 0 评论 -
STL源码剖析——deque的实现
deque简介deque是一个双向开口的容器,可在头尾两端插入和删除元素,deque由动态的连续空间组合而成,因为迭代器的良好设计,提供了随机访问,造成一种deque为连续空间的假象deque的数据结构deque有一个二级指针map,map指向一小块空间,其中的每个元素都是指针,指向一段连续线性空间,称为缓冲区,缓冲区为deque存储的主体,其中存放元素tempalte <class T, clas原创 2017-11-01 17:39:57 · 574 阅读 · 0 评论 -
STL源码剖析——type traits编程技法
type traits 负责萃取元素类型的特性,如果元素具有某个性质则我们调用某个函数,如果不具有某个性质则调用另一个函数。它充分利用了C++模板编程和编译器的参数推导功能(编译器只有面对类类型参数才会进行参数推导)。STL大量运用了traits编程技巧,通过模板特化,函数重载让编译器选择正确的处理方式,在编译器就能完成函数分发,极大的提高了灵活性。先看一个例子#include <iostream>原创 2017-09-08 17:02:15 · 384 阅读 · 0 评论 -
leetcode93. Restore IP Addresses
难度:medium题目:IP 地址是一个32位的整数,每8位的十进制组成一个数,用 . 分隔很明显是一个回朔法的题,特别注意的是遇到0时的情况,还有每个数值要小于256,进行剪枝减小运算量AC解:class Solution {public: vector<string> restoreIpAddresses(string s) { int len = s.length()原创 2017-09-04 19:20:14 · 384 阅读 · 0 评论 -
leetcode 44. Wildcard Matching
难度:hard题目:与leetcode10. Regular Expression Matching此题类似,同样采用动态规划,这两题解法很精彩,比较经典AC解:class Solution {public: bool isMatch(string s, string p) { int slen = s.length(); int plen = p.leng原创 2017-09-04 17:48:39 · 329 阅读 · 0 评论 -
leetcode10. Regular Expression Matching
难度:hard题目:AC解:class Solution {public: bool isMatch(string s, string p) { int slen = s.length(); int plen = p.length(); if (slen == 0 && plen == 0) return true;原创 2017-09-04 17:36:03 · 345 阅读 · 0 评论 -
STL源码剖析——内存空间管理
STL内存空间管理工具alloc1.第一级配置器__malloc_alloc_templatestaic void *allocate(size_t n) { void *result = malloc(n);//直接调用malloc if (0 == n) result = oom_malloc(n); return result;}static void *deallo原创 2017-09-03 17:33:52 · 999 阅读 · 1 评论 -
leetcode25. Reverse Nodes in k-Group
Hard程度题题目:Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.k is a positive integer and is less than or equal to the length of the linked lis原创 2017-04-20 15:20:49 · 441 阅读 · 0 评论 -
leetcode151. Reverse Words in a String
medium程度题题目:Given an input string, reverse the string word by word.For example,Given s = "the sky is blue",return "blue is sky the".难度在于给定字符串中空格连续出现的次数不限定如Given s = " I lov原创 2017-02-24 23:07:33 · 435 阅读 · 0 评论 -
leetcode165. Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.原创 2017-01-25 23:28:02 · 359 阅读 · 0 评论 -
【C++源码】PE文件结构中导出表的解析
【C++源码】PE文件结构中导出表的解析 控制台版本原创 2016-08-31 19:39:50 · 3570 阅读 · 2 评论 -
利用缓冲区溢出来执行函数
首先用代码#include "stdafx.h"void overFlow(){while (1){printf( "over flow!\n");}getchar();}int main(){int a[3] = { 0 };return 0;}用VS查看反汇编代码a[2]对应的地址为EBP-C学过汇编我原创 2016-07-05 17:13:53 · 1240 阅读 · 0 评论 -
一次函数调用过程对堆栈的逆向分析之旅
阅读需要有一点汇编基础,源代码如下#include "stdafx.h"int plus(int x, int y){int z = 2;return x + y + z;}int main(){int c = plus(3, 4);return 0;}用VS的反汇编找到main函数的地址0xF216E0将程序载入OD,到达0xF原创 2016-07-05 14:55:03 · 2116 阅读 · 0 评论 -
能否通过内嵌汇编修改C++中const常量的值
最近学了一点点汇编,突然想到能不能通过内嵌汇编修改C++中const常量的值。可以看到定义const常量也是在堆栈中开辟空间也可以改变所在地址的值然而当我们输出i时,直接把1入栈,相当于在以后编译器把i当作1处理了 一篇文章c++中const常量的存储位置探讨结尾写到:1.对const常量取地址时,编译器会进行内存分配,并将常量转换为立即数存入内存,而不原创 2016-06-26 22:53:43 · 1119 阅读 · 0 评论