cpp
jinyu123
这个作者很懒,什么都没留下…
展开
-
一句话搞定string类型大小写转换之transform用法
一句话搞定string类型大小写转换之transform用法对于cpp中的string类型大小写转换用的可以说非常频繁,下面是使用STL实现的一种非常简单的方式进行转换 std::transform (strExt.begin(), strExt.end(), strExt.begin(), ::toupper ); //将strExt转换成大写。 其实transform的用法非常广泛,下原创 2012-02-25 15:29:13 · 327 阅读 · 0 评论 -
linux下c++多线程下统计程序运行时间(非常注意)
linux下c++多线程下统计程序运行时间(非常注意)查看一下clock()函数的功能: 这个函数返回从“开启这个程序进程”到“程序中调用C++ clock()函数”时之间的CPU时钟计时单元(clock tick)数当程序单线程或者单核心机器运行时,这种时间的统计方法是正确的。但是如果要执行的代码多个线程并发执行时就会出问题,因为最终end-begin将会是多个核心总共执行的时钟嘀嗒数,转载 2012-02-19 10:29:00 · 1327 阅读 · 0 评论 -
linux查看文件夹大小
linux查看文件夹大小只查看该文件夹的大小du -h --max-depth=0 ;查看文件夹下每个文件的大小 du -h --max-depth=1 参考: Google Protocol Buffer 的使用和原理参考: 关于char字符移位问题参考: 腾讯游戏的矩阵效应参考: 腾讯游戏的矩阵效应参考: C语言字符串函数大全参考:转载 2012-02-19 10:29:26 · 202 阅读 · 0 评论 -
C语言字符串函数大全
C语言字符串函数大全函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例:参考: 一个简单问题的并行算法参考: QQ架构的讨论(整理)参考: linux查看文件夹大小参考: 矩阵乘法的并行算法参考: 布隆过滤器在网页去重中的应用转载 2012-02-19 10:29:54 · 243 阅读 · 0 评论 -
布隆过滤器在网页去重中的应用
布隆过滤器在网页去重中的应用假设你想从网上(新浪新闻)去下载一批网页,做信息检索(搜索引擎)的第一步.你已经从网上下载下来了一批网页,并且有这批网页的URL,不过你还有一批需要下载的网页的URL, 问题是这样的,如果有些URL已经被下载过了,你就不必要再次下载了,现在让你快速的识别出哪些URL上的是还没被下载的,可以有一定的误差,但是不能超过1%参考: 寻找无序数组中的第K大数转载 2012-02-19 10:30:27 · 730 阅读 · 0 评论 -
效率极低人群之七大习惯
效率极低人群之七大习惯就像寻找对你有益的习惯一样,寻找妨碍你的习惯同样重要。这7种习惯中大多数都可能会轻易成为你日常生活的一部分,使你难以察觉它的存在(或者它如何影响到你)。我曾经略微尝试了这些习惯,结果毫无疑问,那些重要的事情没有几个可以完成。同时我也要添加说明的是,这只是在生活中你可能形成的影响效率的主要的7个习惯,我很确定绝不仅仅是这些参考: C++内存池的实现实例转载 2012-02-19 10:30:57 · 541 阅读 · 0 评论 -
关于char字符移位问题
关于char字符移位问题结果是255, 0XFF!unbelievable!,为什么呢,我作一点猜想,可能是由于编译器自身的考虑,char字符在移位的时间先将char 转换成整数,自然0x80转换成整数肯定是一个负数,所以在32位整数中前面24位肯定都是1,所以右移的时候就出现了补1的问题参考: QQ架构的讨论(整理)参考: linux查看文件夹大小参考: G转载 2012-02-19 10:31:38 · 366 阅读 · 0 评论 -
寻找无序数组中的第K大数
寻找无序数组中的第K大数例如寻找5, 2, 6, 3中的第3大数,排好序后变为2 , 3 , 5 , 6 , 故结果为5,可以利用上述函数cout<< quicksort(x , 0 , 3 , 3)<<endl;参考: 多线程伪共享(false sharing)问题分析参考: 指针数组/数组指针参考: 有序数组合并的并行算法(有一定限制)参考: Go转载 2012-02-19 10:33:39 · 324 阅读 · 0 评论 -
腾讯游戏的矩阵效应
腾讯游戏的矩阵效应走自己的路,让别人无路可走。”尽管互联网的英雄们在公开场合声讨腾讯已成为一种常态,但事实上,私底下却是一种复杂的心态——曾几何时,那些有野心的互联网创业家都渴望成为像腾讯一样的“全民公敌”,只是梦想照进了腾讯的现实。不难理解这种心态,在许多人看来,腾讯不过是在即时通讯领域早发力了几年而已。如果将腾讯的成功单纯归结于此,显然有失偏颇。如今的腾讯已经是一个几乎涵盖所有互联网主转载 2012-02-19 10:34:07 · 528 阅读 · 0 评论 -
C++ 中 vector 如何实现内存分配
C++ 中 vector 如何实现内存分配为了支持随机访问,vector中的元素采用顺序存放,即每一个元素紧挨着前一个元素进行存储。那么现在只有可能出现问题了,当内存中没有足够连续的空间去存放新插入来的元素怎么办,C++是这样处理的:重新分配内存空间,将原来旧的元素全部复制到新的存储空间中去,然后再插入新的元素。因此可以看出,如果内存不是特别充足或者内存中没有较大块的空闲空间的,向vect转载 2012-02-19 10:34:35 · 435 阅读 · 0 评论 -
指针和Map 指针和Map
指针和Map怎么样,看下来有点眼花缭乱吧,究竟这个pMap里面存放的是什么呢?为了搞清楚这个问题,我们还是要从指针入手。 搞清楚什么是指针,指针里存放的是什么内容指针是指向一块内存中的存储区域,指针中存放的是段内存的开始地址, 是一个整形数据,占用4个字节,搞清楚这点后,对pMap或许应该有一个清楚的认识。参考: 布隆过滤器在网页去重中的应用参考: C++ 中 vect转载 2012-02-19 10:35:00 · 818 阅读 · 0 评论 -
指针数组/数组指针
指针数组/数组指针C/C++中有两个非常容易混淆的十分常用的但是又特别不引起人注意的两个概念,指针数组和数组指针,或许你已经对这两个概念早有耳闻,但是不知你有没有对他们做过细致的分析来区别二者呢?参考: QQ架构的讨论(整理)参考: cpp程序性能优化参考: 矩阵乘法的并行算法参考: 指针数组/数组指针参考: 腾讯游戏的矩阵效应参考转载 2012-02-19 10:35:29 · 293 阅读 · 0 评论 -
有序数组合并的并行算法(有一定限制)
有序数组合并的并行算法(有一定限制)如果A=(a1,a2,...,am)和B=(b1,b2,...,bn)是两个有序的升序数组,合并数组A和B就行形成一个新的升序数组包含A和B的有所有元素,假设A=(2,4,11,12,14,35,95,99),B=(6,7,9,25,26,31,42,85,87,102,105). 如果合并A和B的数组,串行算法会遍历两个数组,然后将数组元素存到数组C中转载 2012-02-19 10:36:11 · 280 阅读 · 0 评论 -
C++内存池的实现实例
C++内存池的实现实例本节分析在某个大型应用程序实际应用到的一个内存池实现,并详细讲解其使用方法与工作原理。这是一个应用于单线程环境且分配单元大小固定的内存池,一般用来为执行时会动态频繁地创建且可能会被多次创建的类对象或者结构体分配内存参考: 一个简单问题的并行算法参考: 判断是否为欧拉图的并行算法参考: 效率极低人群之七大习惯参考: 指针数组/数组转载 2012-02-19 10:28:30 · 295 阅读 · 0 评论 -
cpp程序性能优化
cpp程序性能优化重中之重 - 算法优化: 程序性能优化最显著的优化方法是算法上的优化,算法的优化对性能的提升往往是一个数量级的,例如排序,冒泡的时间复杂度为O(N^2),而快速排序的时间复杂度为O(Nlog(N)),这种性能的提供是非常明显的。 2. 消除冗余的循环: 我们先看一下for循环生成的汇编代码for (int N = 4.参考: 效率极低人群之七大习惯参考:转载 2012-02-19 10:27:54 · 360 阅读 · 0 评论 -
QQ通信协议
QQ通信协议不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。 二、聊天消息通信。 采用U转载 2012-02-19 10:27:19 · 293 阅读 · 0 评论 -
cpp不区分大小写比较字符串string
cpp不区分大小写比较字符串stringint StrCaseCmp(const string & stra , const string & strb) { int aLen = stra.length(); int bLen = strb.length(); int iRes = 0 , iPos = 0; for (iPos = 0; iPos < aLen && iPos < bL原创 2012-02-25 15:29:54 · 725 阅读 · 0 评论 -
C/C++/CPP中与虚拟存储器(指针)有关错误汇总(一)
C/C++/CPP中与虚拟存储器(指针)有关错误汇总(一)一, 指针引用错误。 现代操作系统中普通使用虚拟存储器系统,使得每个进程可以使用的地址空间达到2^N,N为机器的位数,但是实际中并不需要如此大的内存,所以如果间接将引用的指针指向一块没有使用的内存空间中,操作系统会会报出segment error错误。 int val; scanf("%d" , val);很明显上面scanf的使用原创 2012-02-25 15:30:17 · 229 阅读 · 0 评论 -
判断是否为欧拉图的并行算法
判断是否为欧拉图的并行算法欧拉图: 一个图为欧拉图,当且公当有一条回路经过图的每一条边且恰好经过一次。 欧拉定理表明:一个图为欧拉图,当且仅当不含有奇度数的顶。 假设图G大小为M * N和邻接矩阵A。 判断一个图是否为欧拉图,很容易在O(M*N)的时间内完成。 为了说明方便,下面设M = N 下面给出复杂度为O(Log(N)) 并行算法,注意这里只给出理论上可行的算法。 1. 计算每个点.原创 2012-02-25 15:32:30 · 883 阅读 · 0 评论 -
C/C++/CPP中与虚拟存储器(指针)有关错误汇总(二)
C/C++/CPP中与虚拟存储器(指针)有关错误汇总(二)首先参考 C/C++/CPP中与虚拟存储器(指针)有关错误汇总(一) 6. 错误指针地址运算 指针的算法运算是以他们指向对象的大小为单位来进行运算的,例如整形指针pval, 如果求当前指针指针整数的下一个整数只需要int * pnext = pval + 1,很多对指针不熟悉的人可能会int *pNext = pVal + size原创 2012-02-25 15:30:44 · 220 阅读 · 0 评论 -
设计一个不能被复制的类
设计一个不能被复制的类在C++中如果要求一个类能被复制需要实现赋值运算符或者复制构造函数,因此要想一个类不能被复杂,只需将这两个函数设置private访问属性即可class NoCopy{ public: NoCopy(){} private : NoCopy(const NoCopy & copy){} NoCopy & operator = (const NoCopy & copy){原创 2012-02-25 15:31:13 · 359 阅读 · 0 评论 -
矩阵乘法的并行算法
矩阵乘法的并行算法设两个矩阵A和B,大小分别为M * N 和 N * P, 如果C = A * B, 则C的大小为M * P。 矩阵算法的算法表示,伪代码如下: for (i = 0; i < M; ++i){ for (j = 0; j < P; ++j){ C[i][j] = 0; for (k = 0; k < N; ++k){ C[i][j] += A[i][k] * B[k][j原创 2012-02-25 15:31:36 · 853 阅读 · 0 评论 -
TBB(intel threading building blocks)内存分配算法(一)
TBB(intel threading building blocks)内存分配算法(一)开篇:最近研究了一下TBB的内存分配算法,发现设计的非常优雅,故和大家分析一下它的算法思想。 既然是开篇,那么我们就先从最基本的入手来看一下TBB基于Cache对齐的内存管理算法。首先来明确几个概念。 cache: 现代的cpu都引入的cache的概念,即cpu在参与运算时并非每次都去内存中取得数据的原创 2012-02-25 15:33:23 · 534 阅读 · 0 评论 -
设计一个不能被继承的类
设计一个不能被继承的类在c++中每个类都一个构造函数和一个析构函数,即使用户不明确定义,系统也会类定义一个默认的构造函数和析构函数。当创建该类的对象可以显示或者隐式调用构造函数,当对象销毁时会自动调用析构函数。 当有子类继承父类,创建子类的对象时,会自动调用父类的构造函数,同样当对象销毁时也会自动调用父类的析构函数。 在类属性中private不允许用户和子类调用该函数的方法。 因此要想使用原创 2012-02-25 15:28:21 · 222 阅读 · 0 评论 -
多线程伪共享(false sharing)问题分析
多线程伪共享(false sharing)问题分析在多核的CPU架构中,每一个核心core都会有自己的缓存空间,因此如果一个变量如果同时存在不同的核心缓存空间时,就会出现伪共享(false sharing)的问题。 此时如果一个核心修改了该变量,该修改需要同步到其它核心的缓存。 在linux执行cat /proc/cpuinfo 来查看cpu的缓存的行大小: cache_alignment原创 2012-02-25 15:32:55 · 389 阅读 · 0 评论 -
矩阵乘法的并行算法
矩阵乘法的并行算法设两个矩阵A和B,大小分别为M * N 和 N * P, 如果C = A * B, 则C的大小为M * P。 矩阵算法的算法表示,伪代码如下: for (i = 0; i < M; ++i){ for (j = 0; j < P; ++j){ C[i][j] = 0; for (k = 0; k < N; ++k){ C[i][j] += A[i][k] * B[k][j转载 2012-02-19 10:25:37 · 522 阅读 · 0 评论 -
QQ架构的讨论(整理)
QQ架构的讨论(整理)转贴:QQ的架构问题 -----------sodme 大宝 hi, all: 我把第一个问题选为:QQ的架构。呵呵,题目是不是有点大?QQ现在的最高在线用户数是1900万,我们来讨论一下要作一个这样的架构如何来作更好,大家积极发言,这也是我这个周末为自己选择的思考题,呵呵。大家积极畅所欲言。 我们讨论的问题可以包括但不限于这些内容: 1.登录时的负载如何解决的 2.转载 2012-02-19 10:26:18 · 624 阅读 · 0 评论 -
Google Protocol Buffer 的使用和原理
Google Protocol Buffer 的使用和原理刘 明, 软件工程师, 上海交大电子与通信系 简介: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 AP转载 2012-02-19 10:26:49 · 466 阅读 · 0 评论 -
编写标准的字符串复制(strcpy)函数
编写标准的字符串复制(strcpy)函数C++中strcpy函数定义在string.h库中,其标准形式如下: char *strcpy(char *dest, const char *src); 可以实现如下: char *strcpy(char *dest, const char *src) { assert(dest != NULL && src != NULL); //对参数合法性进原创 2012-02-25 15:28:46 · 351 阅读 · 0 评论