c++
爱思考的实践者
我的到来,让世界变得更好。My coming makes this world a better place to live in.
展开
-
冒泡、选择和快速排序算法的C++实现
冒泡、选择和快速排序算法的C++实现#include <iostream>using namespace std;void print(int* pData, int count){ for (int i = 0; i< count; i++) { cout << pData[i] << " "; } cout << endl;...原创 2016-02-29 14:31:38 · 4146 阅读 · 0 评论 -
boost库的安装和使用略记
boost库的安装和使用略记一、对于Windows平台,在VS2013中安装配置boost_1_58_0库(默认已安装vs2013)1.到www.boost.org下载相应的代码包,我下载的是boost_1_58_0.tar.bz22. 解压boost文件到本地目录(如G:\boost_1_58_0),可以发现解压后的文件中有一个bootstrap.bat文件。原创 2015-12-18 15:01:13 · 10969 阅读 · 1 评论 -
Jsoncpp编程接口及使用方法简介
Jsoncpp编程接口Jsoncpp是一个使用C++语言实现的面向对象的json库,以静态库的形式提供,使用非常简单。Jsoncpp提供的接口中有3个核心类:Reader、Writer、Value。Reader类负责从字符串或者输入流中加载JSON文档,并进行解析,生成代表JSON文档的Value对象。Writer类负责将内存中的Value对象转换成JSON文档,输出到文件或者原创 2015-07-10 16:27:30 · 2912 阅读 · 0 评论 -
C++处理JSON示例
一、简单介绍 JSON 的全称为:JavaScript Object Notation,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。二、第三方库 jsoncpp:它 是比较出名的 C++ JSON 解析库。地址:http://sourceforge.net/projects/jsoncpp三、使用方法原创 2015-07-10 10:19:10 · 32088 阅读 · 1 评论 -
C可变参数函数实现
在C程序中,为了实现可变参数函数,要用到以下这些宏:void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr ); va_list:用来保存宏va_start、va_arg和va_end所需信息的一种原创 2015-10-27 17:45:33 · 449 阅读 · 0 评论 -
linux下用core和gdb查询出现"段错误"的地方
有些时候,在执行一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误"。遇到这种问题是非常无语的,只是提示了"段错误",其他什么都没有。如果我们一味地去看代码查找问题,那太疼苦了,因为我们都相信自己写的代码没问题。下面介绍一种方法,可以有效定位出现"段错误"的地方。当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问原创 2015-10-23 16:49:01 · 2631 阅读 · 0 评论 -
C++ function、bind以及lamda表达式
本文主要是内容是C++0x中新增的lambda表达式, function对象和bind机制。之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对这部分内容的理解。在开始之前,首先要讲一个概念------closure(闭包),这个概念是理解lambda的基础。下面我们来看看wikipedia上对于计算机领域的closure的定义:A closu原创 2015-08-12 16:53:22 · 676 阅读 · 0 评论 -
《UNIX环境高级编程》示例代码中apue.h头文件的配置
最近学习《UNIX环境高级编程》(第3版)这本书,从http://www.apuebook.com/ 下载的示例在编译时,总是提示 "错误:apue.h:没有那个文件或目录",发现apue.h是作者自定义的一个头文件,包括程序所需的常用头文件及出错处理函数。我们将它放入系统头文件中(Linux下是 /usr/include),这样gcc编译器就能找到它了。 具体步骤为:原创 2015-09-29 17:13:33 · 610 阅读 · 0 评论 -
Log4j日志级别
日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。日志记录器(Logger)的可用级别Level (不包括自定义级别 Level)分别为:( 以下内容就是摘自log4j API http://jakarta.apache.org/log4j/docs/api/index.html):public static final Leve原创 2015-08-21 14:58:45 · 575 阅读 · 0 评论 -
设计模式之装饰模式
装饰模式动态地给一个对象添加一些额外的职责(不重要的功能,只是偶然一次要执行),就增加功能来说,装饰模式比生成子类更为灵活。建造过程不稳定,按正确的顺序串联起来进行控制。GOOD:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功能),就会增加类的复杂度。装饰模式就是把要添加的附加功能分别放原创 2015-08-05 15:29:01 · 339 阅读 · 0 评论 -
WindowsXP下 VC6.0 编译、安装Boost库
在WindowsXP下 ,VC6.0 编译、安装Boost库首先,从Boost的老巢http://www.boost.org/下载。下载完成以后,是一个安装文件(其实就是进行自动解压缩的)。选择你的目录,解压缩Boost库。然后,我们开始对其进行编译。我所下载的版本是1.33.1。编译步骤为:1.进入cmd命令行。2.进入安装VC的目录,例如c:/Program Fil转载 2015-12-29 16:11:06 · 1593 阅读 · 0 评论 -
智能指针学习
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p转载 2015-08-12 11:36:21 · 385 阅读 · 0 评论 -
boost 1.56.0 编译及使用
boost 1.56.0编译及使用boost的编译和使用,经过搜集资料和总结,记录成文。感谢文后所列参考资料的作者。1下载地址:http://sourceforge.net/projects/boost/files/boost/1.56.0/可以选择 boost_1_56_0.7z 下载。2编译2.1生成boost的编译工具bjam.exe解压后,使用VS2013编转载 2015-12-18 15:14:59 · 673 阅读 · 0 评论 -
daemon 进程为什么要fork两次
daemon 进程为什么要fork两次daemon进程是后台守护进程,有时候也叫精灵进程(agent)。linux下server都是daemon进程。相信大部分开发人员都知道如何去写一个daemon进程。但是另一方面,大部分人不知道为什么要这么做,不少人是从某个地方copy一个函数,拿来主义。但是具体为什么这么实现,却不是很透彻。 见过一些面试官或被面试人,很多人解释daem...原创 2016-03-25 11:12:43 · 1368 阅读 · 0 评论 -
C++ 内存池学习 -- C++ Memory Pool
这是我翻译的文章,来自 Code Project,原文作者: DanDanger2000. 原文链接: http://www.codeproject.com/cpp/MemoryPool.aspC++ 内存池l 下载示例工程 – 105Kbl 下载源代码 – 17.3Kb目录l 引言l 它怎样工作l 示例l 使用这些代码转载 2016-03-15 10:58:38 · 1015 阅读 · 0 评论 -
linux c++ 服务器端开发面试必看书籍
由于很多朋友希望加入到Linux c++服务器端开发的队伍中,本人就结合自己的面试经历并整理了自己阅读的相关书籍,同大家分享,一起进步。人个认为以下是进入这个方向的必看书籍,各系列难度由浅入深的排序。一、算法基础系列数据结构基础(C语言版)》朱仲涛 译《剑指Offer》《编程之美》《编程珠玑》《CareerCup-Top 150 Questions 4th》《[算法导论].(美国)转载 2016-02-25 21:35:03 · 923 阅读 · 0 评论 -
C/C++内存泄漏及检测
“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。如果程序运行时间足够长,如后台进程运行在服务器上,只要服务器不宕机就一转载 2016-04-01 17:07:09 · 464 阅读 · 0 评论 -
linux下5种网络IO模型简介
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么?到底有什么区别?对于这个问题,不同的人给出的答案可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不转载 2016-02-23 14:38:09 · 2484 阅读 · 2 评论 -
C++简单实现对象引用计数示例
C++简单实现对象引用计数示例#include #include using namespace std;class String {public: String(const char *pdata); String(const String &rhs); String &operator = (const String &rhs); ~String();public:原创 2016-02-17 15:16:35 · 2435 阅读 · 0 评论 -
__FILE__,__LINE__,__DATE__,__TIME__,__FUNCTION__调试宏
C/C++ 有5个常用的预定义宏,可以当作变量直接使用 , 一般用作程序调试。其名称分别为 :__FILE__,__FUNCTION _,__LINE__,__DATE__,__TIME__。其含义如下:__FILE__: 记录文件的路径加名称__FUNCTION __:当前所在函数名__LINE__: 记录文件已经被编译的行数__DATE__: 记录文件的编译日期__原创 2015-12-04 10:31:21 · 820 阅读 · 0 评论 -
智能指针的使用
在 c++ 98 里面只有一种智能指针,就是 std::auto_ptr,因为具有唯一所有权的特征,所以限制了它的使用范围,比如你无法在容器中使用它。而我们知道 stl 容器是值语义的,如果不能用智能指针管理的话,只有两种办法来使用。一种是类似这样,直接进行值拷贝:std::vector names;names.push_back("cyberscorpio");std::st原创 2015-08-11 15:58:24 · 478 阅读 · 0 评论 -
设计模式之策略模式
策略模式 定义算法家族,分别封装起来,让它们之间可以互相替换,让算法变化,不会影响到用户。 GOOD:适合类中的成员以方法为主,算法经常变动;简化了单元测试(因为每个算法都有自己的类,可以通过自己的接口单独测试)。 策略模式和简单工厂基本相同,但简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。 BUG:客户端要做出判断。 例#includ原创 2015-08-05 13:29:52 · 299 阅读 · 0 评论 -
设计模式之工厂模式
简单工厂模式 主要用于创建对象。新添加类时,不会影响以前的系统代码。其核心思想是:用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。 GOOD:适用于不同情况创建不同的类时。 BUG:客户端必须要知道基类和工厂类,耦合性差。下面以加减乘除算法运算符为例。#include //#include using原创 2015-08-04 18:29:37 · 351 阅读 · 0 评论 -
值得推荐的C/C++框架和库 (真的很强大)
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/转载 2015-08-12 17:30:07 · 539 阅读 · 0 评论 -
标准库的setlocale()用法笔记
C标准库的setlocale()用法笔记转自:http://zyxhome.org/wp/cc-prog-lang/c-stdlib-setlocale-usage-note/ [在此向原文作者说声谢谢!若有读者看到文章转载时请写该转载地址,不要写我的BLOG地址。尊重他人的劳动成果 ^_^ ]C 和 C++ 的标准库分别有自己的 locale转载 2015-03-04 13:50:39 · 6453 阅读 · 0 评论 -
linux使用共享内存
一、在linux中使用共享内存的目的: 共享内存是进程间通信中最简单的方式之一。 共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。 当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。二、使用共享内存的流程: 1.首先,进程必须分配它。 2.然后,需要访问这个共享内存块的每一个进程原创 2015-03-24 15:52:27 · 630 阅读 · 0 评论 -
linux中fork()函数详解
一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。...转载 2015-03-25 09:57:11 · 521 阅读 · 0 评论 -
string替换所有指定字符串(C++)
C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事。首先明白一个概念,即string替换所有字符串,将"12212"这个字符串的所有"12"都替换成"21",结果是什么?可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现,代码转载 2015-01-25 18:51:26 · 8816 阅读 · 0 评论 -
C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方,还请各位多多指教(本文所有程序均通过VC 6.0运行)。1、cin 2、cin.get() 3、cin.getline() 4、getline()转载 2015-01-25 18:33:45 · 490 阅读 · 0 评论 -
terminate called after throwing an instance of 'otl_tmpl_exception<otl_exc, otl_conn, otl_cur>`解决方法
在linux下用c++连接MySQL或oracle数据库时,若频繁调用otlstream构造函数,发生 terminate called after throwing an instance of 'otl_tmpl_exception<otl_exc, otl_conn, otl_cur>`的问题,其解决方法为:原创 2015-01-16 17:49:04 · 3296 阅读 · 0 评论 -
互斥锁pthread_mutex_t的使用(转载)
互斥锁pthread_mutex_t的使用(转载) 1. 互斥锁创建有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;转载 2014-12-25 14:55:50 · 569 阅读 · 0 评论 -
编写类String 的构造函数、拷贝构造函数、析构函数和赋值函数
编写类String 的构造函数、析构函数和赋值函数,已知类String 的原型为:class String{public:String(const char *str = NULL); // 普通构造函数String(const String &other); // 拷贝构造函数~ String(void); // 析构函数String & operate =(cons转载 2015-02-01 16:35:47 · 1927 阅读 · 0 评论 -
linux下curl的使用方法(转载和修改)
curl是一个利用URL语法在命令行方式下工作的文件传输工具。本文介绍了它的简单用法。 curl是一个利用URL语法在命令行方式下工作的文件传输工具。它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerb转载 2014-12-01 17:26:00 · 1749 阅读 · 0 评论 -
linux和windows下socket编程的一点区别
本文转自:http://blog.csdn.net/hanshuai8602/article/details/6586396(以下假设我们的网络通信采用的TCP协议且采用阻塞模式)一、linux下的socket编程:1、客户端执行步骤依次如下:socket()connect()send()或者recv()close()注意的是,c转载 2015-04-03 18:16:35 · 2036 阅读 · 0 评论 -
linux下 semop及PV操作方法介绍
信号量的值与相应资源的使用情况有关。当它的值大于 0 时,表示当前可用的资源数的数量;当它的值小于 0 时,其绝对值表示等待使用该资源的进程个数。信号量的值仅能由 PV 操作来改变。 在 Linux 下,PV 操作通过调用semop函数来实现。该函数定义在头文件 sys/sem.h中,原型如下: int semop(int semid,struct sembuf转载 2015-03-25 15:57:45 · 3330 阅读 · 0 评论 -
正确使用STL-MAP中Erase函数
第一讲在STL标准里面,map的erase函数的返回值确如下:map.erase有3个重载:void erase ( iterator position );size_type erase ( const key_type& x );void erase ( iterator first, iterator last );所以下面代码中的例子是针对标准STL中map的era原创 2015-04-03 15:28:50 · 1180 阅读 · 1 评论 -
C++中lambda表达式学习
lambda表达式C++ 语言中的lambda表达式在很多情况下提供了函数对象的另一种实现机制。Lambda表达式并不是STL所特有的,但它广泛应用于这一环境中。Lambda是表达式、是定义一个没有名称、也不需要显示类定义的函数对象。Lambda表达式一般作为一种手段,用来将函数作为实参传递到另一个函数。相比于定义和创建一个常规的函数对象而言,lambda表达式非常容易使用和理解,而且需要原创 2015-08-11 11:46:57 · 920 阅读 · 0 评论 -
pthread_cond_signal和pthread_cond_wait简介
原文: http://apps.hi.baidu.com/share/detail/19786281http://hi.baidu.com/boobleoo0/blog/item/5f935039a37c58f8b311c77f.html http://topic.csdn.net/u/20110105/16/12717238-9816-4571-a03d-e8b603724946转载 2015-05-21 22:10:05 · 745 阅读 · 0 评论 -
条件变量pthread_cond_t使用示例
示例代码:[cpp] view plaincopy#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/ pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*初转载 2015-07-15 16:34:43 · 596 阅读 · 0 评论 -
linux下epoll模型应用介绍
第一讲什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44)。它几乎具备了之前所说的一切优点,被公认为Linux2.6内核下性能最好的多路I/O就绪通知方法。原创 2015-04-15 10:29:13 · 1037 阅读 · 0 评论