转:c++ 11 新特性
摘要:声 明:本文源自 Danny Kalev 在 2011 年 6 月 21 日发表的《The Biggest Changes in C++11(and Why You Should Care)》一文,几乎所有内容都搬了过来,但不是全文照译,有困惑之处,请参详原文(http://www.software...
阅读全文
posted @
2015-03-26 15:12
单车博客园
阅读(201)
推荐(0)
基于比较的常用排序算法总结
摘要:基于比较的排序算法,应该是最符合人们直觉的方法。在各种算法的技术书上,已经证明了基于比较的排序算法的时间最优复杂度为O(nlogn)。下面是几种常见的基于比较的排序算法:1. 选择排序:这应该是最直观的排序方法。在排序n个元素时,第一次遍历,找到最小的元素,将其与第一个元素互换;第二次遍历,找到次小...
阅读全文
posted @
2015-02-05 14:46
单车博客园
阅读(1469)
推荐(0)
select,epoll,poll比较
摘要:select,poll,epoll简介selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1 单个进程可监视的fd数量被限制2 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大3 对socket进行...
阅读全文
posted @
2014-06-11 17:47
单车博客园
阅读(374)
推荐(0)
异常处理(try catch throw)详解(C++)
摘要:选择异常处理的编程方法的具体原因如下:1、把错误处理和真正的工作分开来;2、代码更易组织,更清晰,复杂的工作任务更容易实现;3、毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;4、由于C++中的try catch可以分层嵌套,所以它提供了一种方法使得程序的控制流可以安全的跳转到上层(或者上上层)的错误处理模块中去。(不同于return语句,异常处理的控制流是可以安全地跨越一个或多个函数)。5、还有一个重要的原因就是,由于目前需要开发的软件产品总是变得越来越复杂、越来越庞大,如果系统中没有一个可靠的异常处理模型,那必定是一件十分糟糕的局面。异常处理仅仅通过类型而不是通过值来匹配的,
阅读全文
posted @
2014-03-18 15:43
单车博客园
阅读(1015)
推荐(0)
C++ Virtual 关键字
摘要:虚函数是C++中用于多态的机制。核心理念就是通过基类访问派生类定义的函数。基类的析构含糊都必须是virtual的虚函数只能借助于指针或者引用来达到多态的效果。前提B类继承与A类 且foo()为虚函数void bar(A *a){a->foo();//被调用的是A::foo()还是B::foo() ?}如果a指向的是A类的实例,则A::foo()被调用,如果a指向的是B类实例,则指向 B::foo();在设计一个基类的时候,如果发现一个函数需要在派生类里有不同的表现,那么它就应该是虚的。 从设计角度讲,出现在基类中的虚函数是接口,出现在派生类中的虚函数是接口的具体实现。通过 这样的方法,就
阅读全文
posted @
2014-02-21 14:21
单车博客园
阅读(314)
推荐(0)
c++ static const
摘要:static 是c++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用:一、控制存储方式: static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。 1、引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点..
阅读全文
posted @
2014-02-20 10:59
单车博客园
阅读(1215)
推荐(0)
LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址
摘要:在接受到UDP包后,有时候我们需要根据所接收到得UDP包,获取它的路由目的IP地址和头标识目的地址。(一)主要的步骤:在setsockopt中设置IP_PKTINFO,然后通过recvmsg来获取struct in_pktinfo(struct in_pktinfo是struct msghdr中msg_control的成员).in_pktinfo结构体(如下所示),我们可以从in_pktinfo中获取路由目的地址(destination address of the packet)、头标识目的地址(source address of the packet)。这种方法只能用于UDP(数据报)传输
阅读全文
posted @
2014-01-20 15:22
单车博客园
阅读(1075)
推荐(0)
通过socket过去本地ip,port和远端ip,port
摘要:struct sockaddr addr;struct sockaddr_in* addr_v4;int addr_len = sizeof(addr);//获取local ip and portZeroMemory(&addr, sizeof(addr));if (0 == getsockname(s, &addr, &addr_len)){if (addr.sa_family == AF_INET){ addr_v4 = (sockaddr_in*)&addr; cMonitorInf.nSourceIP = addr_v4->sin_addr.S_u
阅读全文
posted @
2014-01-20 13:37
单车博客园
阅读(2070)
推荐(0)
ntohs, ntohl, htons,htonl的比较和详解
摘要:在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数:htonl()--"Host to Network Long int"32Bytes ntohl()--"Network to Host Long int"32Bytes htons()--"Host to Network Short int" 16Bytes ntohs()--"Network to Host Short in
阅读全文
posted @
2014-01-20 12:08
单车博客园
阅读(654)
推荐(0)
转 linux socket的select函数例子
摘要:使用select函数可以以非阻塞的方式和多个socket通信。程序只是演示select函数的使用,功能非常简单,即使某个连接关闭以后也不会修改当前连接数,连接数达到最大值后会终止程序。1. 程序使用了一个数组fd_A,通信开始后把需要通信的多个socket描述符都放入此数组。2. 首先生成一个叫sock_fd的socket描述符,用于监听端口。3. 将sock_fd和数组fd_A中不为0的描述符放入select将检查的集合fdsr。4. 处理fdsr中可以接收数据的连接。如果是sock_fd,表明有新连接加入,将新加入连接的socket描述符放置到fd_A。#include #include
阅读全文
posted @
2014-01-17 10:33
单车博客园
阅读(257)
推荐(0)
转 结构体中字节对齐问题(转载)
摘要:struct MyStruct{double dda1;char dda;int type};对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求:sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13但是当在VC中测试上面结构的大小时,你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗?其实,这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了“对齐”处理。在默认情况下,VC规定各成员变量存放的起
阅读全文
posted @
2014-01-15 17:25
单车博客园
阅读(270)
推荐(0)
C语言中volatile关键字的作用
摘要:一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令。对常规内存进行优化的时候,这些优化是透明的,而且效率很好。由编译器优化或者硬件重新排序引起的问题的解决办法是在从硬件(或
阅读全文
posted @
2014-01-15 10:32
单车博客园
阅读(208)
推荐(0)
转 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法
摘要:本文内容框架:§1 Boyer-Moore算法§2 Horspool算法§3 Sunday算法§4 KMP算算法§5 KR算法§6 AC自动机§7 小结§1 Boyer-Moore(BM)算法Boyer-Moore算法原理Boyer-Moore算法是一种基于后缀匹配的模式串匹配算法,后缀匹配就是模式串从右到左开始比较,但模式串的移动还是从左到右的。字符串匹配的关键就是模式串的如何移动才是最高效的,Boyer-Moore为了做到这点定义了两个规则:坏字符规则和好后缀规则,下面图解给出定义:下面分别针对利用坏字符规则和
阅读全文
posted @
2014-01-13 13:57
单车博客园
阅读(3092)
推荐(0)
转 常见hash算法的原理
摘要:散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。比如我们存储70个元素,但我们可能为这70个元素申请了100个元素的空间。70/100=0.7,这个数字称为负载因子。我们之所以这样做,也是为了“快速存取”的目的。我们基于一种结果尽可能随机平均分布的固定
阅读全文
posted @
2014-01-09 15:27
单车博客园
阅读(365)
推荐(0)
转 从头到尾彻底解析Hash表算法
摘要:出处:http://blog.csdn.net/v_JULY_v。 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。 ------------------------------------第一部分:Top K 算法详解 问题描述 百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户...
阅读全文
posted @
2014-01-09 15:26
单车博客园
阅读(295)
推荐(0)
排序
摘要:1. 快速排序介绍:快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。步骤:从数列中挑出一个元素,称为 “基准”(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,
阅读全文
posted @
2014-01-06 13:07
单车博客园
阅读(239)
推荐(0)