随笔分类 -  C++ & 算法

C++中的static关键字,全局作用域中的名字声明与定义
摘要:在C语言中,给全局作用域中的名字加上static关键字,表示这个名字只能在本文件内可见。而且C语言没有赋初值的全局变量在需要的时候被认为是声明而非定义,在连接器中,如果遇见多个强定义的名字,报重定义,如果遇见一个强定义,多个弱定义,则将强定义视为定义,弱定义当成声明,如果多个弱定义,则随机挑选一个作... 阅读全文

posted @ 2015-09-16 22:55 远近闻名的学渣

一个简单的空间配置器
摘要:STl源码剖析中的一个简单空间配置器#ifndef _JJALLOC_#define _JJALLOC_#include #include #include #include namespace JJ {template inline T* _allocate(std::ptrdiff_t size... 阅读全文

posted @ 2015-09-13 22:19 远近闻名的学渣

深入理解c++中的new与delete
摘要:一,new与delete的细节假如有下面的代码:string *sp = new string("a value");string *arr = new string[10];整个new的语句可以分为三步完成,首先,编译器使用名为operator new(operator new[])的标准库函数,... 阅读全文

posted @ 2015-09-13 22:16 远近闻名的学渣

for循环中的小技巧
摘要:for(int i; ; ++i) { dosomething; if (i == xxx) { do something unique; break; } else { do something before ++i; }}处理一个循环,需要对最后一个元素特殊处理,(如链... 阅读全文

posted @ 2015-09-13 22:16 远近闻名的学渣

c++中的命名空间
摘要:在阅读new 与delete相关的东西时,被各种命名空间全局作用域搞得有点乱,在此记录一下。一、命名空间的定义只要能出现在全局作用域中的东西就可以出现在命名空间中。通常这么定义命名空间:namespace Name { decl and define} // 无须分号,像代码块,而不是类命名空间有... 阅读全文

posted @ 2015-09-13 21:47 远近闻名的学渣

c++模板技术:模板的类型转换与类型参数推断
摘要:一、类型转换与模板类型参数模板与函数调用一样,使用传递给模板的实参来初始化模板的形参,只是这个参数是模板参数,且通常是类型参数,在模板编程中,需要有一个很重要的思维转换:非模板编程中,处理的通常是变量,变量的类型是变量的属性,而在模板编程中,处理的更多的是类型本身,我们可以将类型本身作为参数来传递,... 阅读全文

posted @ 2015-09-04 12:02 远近闻名的学渣

lambda表达式
摘要:lambda表达式是可调用对象的一种,在c++中可调用对象有以下几种:1,函数和函数指针2,重载了‘()’运算符的类,以及lambda表达式从实现上来将,函数指针和函数都是等价于一段代码的执行地址,lambda表达式其实就是一个匿名的重载了'()'运算符的对象lambda表达式的用法[capture... 阅读全文

posted @ 2015-08-25 00:37 远近闻名的学渣

auto 与 decltype关键字
摘要:auto两个关键字都用来推断类型,c++作为一种强类型语言有这种关键字是很必要的,尤其是在模板编写的时候,根本无法知道一个变量或者函数的类型,只能使用这种方式推断。比如一个接受迭代器的模板template??? func(It it) { return *it;}由于我们不知道迭代器的类型,所... 阅读全文

posted @ 2015-08-25 00:36 远近闻名的学渣 阅读(192) 评论(0) 推荐(0)

利用哈希表完成根据参数名字获取参数值功能
摘要:class x {...HashMap parameters = new HashMap(); //参数名-参数值之间的映射...public String getParameter(String name) { return parameters.get(na... 阅读全文

posted @ 2015-08-18 11:15 远近闻名的学渣

do{}while(false)的使用
摘要:1,在C语言中,常常使用宏定义写简单函数,这个时候使用#define DOSOMETHING_ do{ dosomething.. }while(0);可以保证不管在什么上下文中,宏都可以正确展开,据说这个用法在linux的内核代码中非常常见2,配合break当作goto语句使使用goto这种丧尽天... 阅读全文

posted @ 2015-08-18 00:19 远近闻名的学渣

C++ 泛型与模板编程基础
摘要:一,模板函数简单的例子template int compare(const T &v1, const T &v2) { if (v1 int compare(const char (&p1)[N], const char (&p2)[M]) { return strcmp(p1, p2)... 阅读全文

posted @ 2015-08-17 21:53 远近闻名的学渣 阅读(196) 评论(0) 推荐(0)

leetcode : Kth Smallest Element in a BST
摘要:Given a binary search tree, write a functionkthSmallestto find thekth smallest element in it.Note:You may assume k is always valid, 1 ≤ k ≤ BST's tota... 阅读全文

posted @ 2015-08-10 13:23 远近闻名的学渣 阅读(141) 评论(0) 推荐(0)

leetcode :Factorial Trailing Zeroes
摘要:Given an integern, return the number of trailing zeroes inn!.Note:Your solution should be in logarithmic time complexity.大致意思给一个n,判断n的阶乘后面有几个0。从1数到n,最... 阅读全文

posted @ 2015-07-15 16:06 远近闻名的学渣 阅读(114) 评论(0) 推荐(0)

系统级I/O
摘要:在unix系统中,要对一个文件进行操作,步骤为先根据文件名打开文件,得到一个文件描述符(通常为非负整数),然后根据文件描述对文件进行I/O操作,之后关闭文件。文件操作在系统中是这样的,每个进程都有一个打开文件表t1,系统中有两个所有文件共享的表t2,以及v1。 (1)表t1表示一个进程打开的所有文... 阅读全文

posted @ 2015-07-05 18:25 远近闻名的学渣 阅读(212) 评论(0) 推荐(0)

Floyd算法
摘要:Floyd算法是求任意图中任意两个节点的最短路径的算法,一般认为Floyd算法使用了动态规划策略。即对任意一条最短路径u ~v, 假如k在该路径中,则改最短路径可以表示为u ~k~v。设Di,j,k为从i到j的只以(1..k)集合中的节点为中间节点的最短路径的长度。若最短路径经过点k,则Di,j,k... 阅读全文

posted @ 2015-07-03 20:21 远近闻名的学渣 阅读(300) 评论(0) 推荐(0)

堆以及优先队列
摘要:堆分为大根堆与小根堆,这里以大根堆为例。PS:这里的堆只涉及二叉堆,斐波那契堆什么的。。智商不够并不能学会- - !定义: 二叉堆通常是一个用数组实现的完全二叉树。并且大根堆满足对于任何一颗子树,其孩子节点的key总是不会比根节点的大。所以堆顶元素(即树根)就是key最大的元素。堆应该支持的操作:... 阅读全文

posted @ 2015-07-03 18:50 远近闻名的学渣 阅读(366) 评论(0) 推荐(0)

socket编程
摘要:一、socket基础 多数操作平台都提供了一组接口使得程序员可以像使用文件一样读写socket。socket通信的基本过程为: (1)客户端: 申请socket-> connect到服务器(阻塞直到连接成功或者出错) -> 开始读写 -> 读写完毕关闭socket (2)服务器: 申请socke - 阅读全文

posted @ 2015-07-03 01:12 远近闻名的学渣 阅读(287) 评论(0) 推荐(0)

Dijkstra算法
摘要:Dijkstra算法是基础图论中非常重要的算法。算法能够算出某一个点到图中其他任何点的最短路劲及其权重,要求图中所有的边的权重都是非负值。算法中需要用到优先队列,优先队列的操作看这里算法维护两个顶点集合S,Q,以及一个估计最短路径数组d,d[i]值表示从源点到顶点i的估计最短路径。任意时刻d[i]都... 阅读全文

posted @ 2015-07-03 01:07 远近闻名的学渣 阅读(1516) 评论(0) 推荐(0)

leetcode:Implement strStr() & KMP 算法
摘要:# leetcode:Implement strStr() & KMP 算法---## 问题描述实现strstr(),即字符串匹配。使用KMP算法解决。但是其实暴力求解也跟KMP算法的速度是相差无几的,因为目标串太短了---## KMP算法与自动机---在编译原理的书上看见KMP算法的一种解释,将目... 阅读全文

posted @ 2015-07-02 19:05 远近闻名的学渣 阅读(224) 评论(0) 推荐(0)

C/C++ 链接与库
摘要:1, 链接 链接是为了支持分离编译,编译器将每个源文件(.c, .cpp ,.h)编译成可重定位的目标文件(.o),然后使用链接器将应该重定向的符号(即定义在其他文件的符号)重定向到正确的地址,并将.o文件合并成一个可执行的目标文件。 链接过程中对于局部变量,以及加了static的全局变量的处理... 阅读全文

posted @ 2015-07-02 12:26 远近闻名的学渣 阅读(184) 评论(0) 推荐(0)

导航