
C/C++学习之路
文章平均质量分 81
滴水梵音
程序人生
展开
-
开源免费的C/C++网络库(c/c++ sockets library)
开源免费的C/C++网络库(c/c++ sockets library) (1)ACE庞大、复杂,适合大型项目。开源、免费,不依赖第三方库,支持跨平台。http://www.cs.wustl.edu/~schmidt/ACE.html (2)AsioAsio基于Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。开源、免费,支持跨平台转载 2013-11-18 11:18:38 · 561 阅读 · 0 评论 -
漫谈C++内存分配失败
漫谈C++内存分配失败 没错,是“漫谈”,而且“漫”得有点乱。然而,抛砖尚可引玉,想到的事情,纵然脉络不那么顺,写下来也不是坏事。开卷有益,动笔也有益。 一切缘自一位C语言开发经验丰富的的朋友问我的一个问题。朋友问:“C++中的new在分配内存失败时会抛出异常(std::bad_alloc)而不返回0(一些老的编译器可能还在返回0,但这样的编译器实在”太老了“),这跟C程序员的做转载 2014-04-09 16:25:36 · 713 阅读 · 0 评论 -
将32位代码向64位平台移植的注意事项
新近的64位平台在二进制上与32位应用程序兼容,这意味着可以非常简单地移植现有的程序。许多目前在32位平台上运行良好的程序也许不必移植,除非程序有以下要求:·需要多于4GB的内存。·使用的文件大小常大于2GB。·密集浮点运算,需要利用64位架构的优势。·能从64位平台的优化数学库中受益。否则,只需简单地重新编译一下,就已经足够了。大多数编写良好的程序不费吹灰之力就可移植到64位转载 2014-06-24 20:21:11 · 641 阅读 · 0 评论 -
面向对象编程的弊端是什么?
弊端是,没有人还记得面向对象原本要解决的问题是什么。1、面向对象原本要解决什么(或者说有什么优良特性)似乎很简单,但实际又很不简单:面向对象三要素封装、继承、多态(警告:事实上,从业界如此总结出这面向对象三要素的一刹那开始,就已经开始犯错了!)。封装:封装的意义,在于明确标识出会访问某个数据结构(用面向对象的术语来说就是 类成员变量)的所有接口。有了封装,就可以转载 2014-06-24 11:16:54 · 731 阅读 · 0 评论 -
STL中map与hash_map容器的选择
STL中map与hash_map容器的选择先看看alvin_lee 朋友做的解析,我觉得还是很正确的,从算法角度阐述了他们之间的问题!实际上这个问题不光C++会遇到,其他所有语言的标准容器的实现及选择上都是要考虑的。做应用程序你可能觉得影响不大,但是写算法或者核心代码就要小心了。今天改进代码,顺便又来温习基础功课了。 还记得Herb Sutter那极有味转载 2014-06-26 15:08:41 · 430 阅读 · 0 评论 -
符号位扩展问题总结
符号位扩展问题总结由如下的一段代码作为本篇文章的引子,也可以通过它看出在写代码时,注意数值转换的重要性。这段代码是将各种类型的数值与unsigned int -1值对比,请注意对比后的结果。1 #include stdio.h>2 3 #define comp_printf(FIRST, SECOND) printf("转载 2014-06-09 10:29:43 · 891 阅读 · 0 评论 -
结构体对齐详解
结构体对齐详解1 -- 结构体数据成员对齐的意义许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。这种强制的要求一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度。比如这么一种处理器,它每次读写内存的转载 2014-06-09 10:20:42 · 418 阅读 · 0 评论 -
大端法、小端法、网络字节序
大端法、小端法、网络字节序关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。也可以说: 1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址转载 2014-06-09 10:22:16 · 474 阅读 · 0 评论 -
速查表:常用算法和数据结构的复杂度
算法数据结构时间复杂度空间复杂度 平均最差最差深度优先搜索 (DFS)Graph of |V| vertices and |E| edges-O(|E| + |V|)O(|V|)广度优先搜索 (BFS)Graph of |V| vertices and |E| edges-O(|E| + |V|)转载 2014-07-07 09:01:11 · 554 阅读 · 0 评论 -
使用Visual Leak Detector (VLD)检测内存泄漏
Visual C++内置内存泄露检测工具,但是功能十分有限。VLD就相当强大,可以定位文件、行号,可以非常准确地找到内存泄漏的位置,而且还免费、开源!在使用的时候只要将VLD的头文件和lib文件放在工程文件中即可。也可以一次设置,新工程就不用重新设置了。只介绍在Visual Studio 2003/2005中的设置方法,VC++ 6.0类似:打开Tools -> Options -转载 2014-06-19 11:04:48 · 907 阅读 · 0 评论 -
使用 Boost 的 IPC 和 MPI 库进行并发编程
Boost C++ 库让并发编程变得既简单又有趣。学习如何使用两个 Boost 库 —— Interprocess (IPC) 库和 Message Passing Interface (MPI) 实现共享内存对象、同步文件锁和分布式通信等功能。Arpan Sen, 独立作家关闭 [x]Arpan Sen 是致力于电子设计自动化行业的软件开发转载 2014-04-23 15:16:53 · 573 阅读 · 0 评论 -
【Boost】boost::function介绍
1. 介绍 Boost.Function库包含了一个类族的函数对象的包装。它的概念很像广义上的回调函数。其有着和函数指针相同的特性但是又包含了一个调用的接口。一个函数指针能够在能以地方被调用或者作为一个回调函数。boost.function能够代替函数指针并提供更大的灵活性。2. 使用 Boost.Function有两种形式:boost::functionf 使用转载 2014-04-18 14:48:24 · 485 阅读 · 0 评论 -
c++字符串简单加密解密
c++字符串简单加密解密#include "stdafx.h"#include#includeusing namespace std;void Makecode(char *pstr,int *pkey);void Cutecode(char *pstr,int *pkey);int _tmain(int argc, _TCHAR* argv[]){转载 2013-11-28 11:12:44 · 4359 阅读 · 0 评论 -
一个C++加密工具EncryptDecrypt.dll
一个C++加密工具EncryptDecrypt.dllEncryptDecrypt.dll文件封装了Rijndael加密算法, 结合SHA-256与CNewRandom (http://www.codeproject.com/Articles/5489/KeePass-Password-Safe这个里面用到的基于SHA-256伪随机数)加密与解密字符串.......这个加密工具有个重要的转载 2013-11-28 11:28:49 · 2533 阅读 · 0 评论 -
编写你的第一个垃圾收集器
编写你的第一个垃圾收集器伯乐在线补充:本文作者 Bob Nystrom 是 Google Dart 团队的一名工程师,所以下文中”处理一些工作上的事情“中的链接是指向了 Dart 官网。Bob 之前(曾在 EA 公司)做过游戏开发,UI 设计。更多信息,请看他的简历。 每当我倍感压力以及有很多事情要做的时候,我总是有这样一种反常的反应,那就是希望做一些其他的事情来摆脱这种状况。转载 2013-12-23 12:27:26 · 520 阅读 · 0 评论 -
C++中public,protected,private派生类继承问题和访问权限问题
C++中public,protected,private派生类继承问题和访问权限问题当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定。1.如果子类从父类继承时使用的继承限定符是public,那么(1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员;(2)父类的private成员转载 2014-01-17 09:31:51 · 666 阅读 · 0 评论 -
iconv 文件编码转换
iconv 文件编码转换linux shell 配置文件中默认的字符集编码为UTF-8 。UTF-8是unicode的一种表达方式,gb2312是和unicode都是字符的编码方式,所以说gb2312跟utf-8的概念应该不是一个层次上的。在LINUX上进行编码转换时,可以利用iconv命令实现,这是针对文件的,即将指定文件从一种编码转换为另一种编码。 查了下iconv命令用法如下:转载 2014-01-17 10:51:33 · 846 阅读 · 0 评论 -
C++文件存取操作
文件存取(File Access)1.stream 可用来存取文件,C++标准库提供了四个template classes,并预先定义了四个标准特化版本:1). basic_ifstream2). basic_ofstream3). basic_fstream4). basic_filbuf2.std::ofstream file(filename.c_str(转载 2014-03-27 13:09:45 · 1328 阅读 · 0 评论 -
【Boost】boost::noncopyable介绍
boost::noncopyable比较简单, 主要用于单例的情况.通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.有noncopyable类, 只要让单例类直接继承noncopyable. class noncopyable的基本思想是把构造函数和析构函数设置pro转载 2014-04-18 13:52:52 · 461 阅读 · 0 评论 -
【boost】boost::bind的使用
最近在几经波折之后,终于对于boost::bind有点理解了。对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法。其实这得益于c++的模板以及操作符重载,去看boost::bind的实现就会发现它是一个有n多重载的函数,这些重载主要是为了适应函数的参数个数。 其实boost::bind的原理是函数对象,而函数对象就是一个重载了()操作符转载 2014-04-18 15:00:30 · 436 阅读 · 0 评论 -
C++中的RAII机制
1.概念Resource Acquisition Is Initialization 机制是Bjarne Stroustrup首先提出的。要解决的是这样一个问题:在C++中,如果在这个程序段结束时需要完成一些资源释放工作,那么正常情况下自然是没有什么问题,但是当一个异常抛出时,释放资源的语句就不会被执行。于是Bjarne Stroustrup就想到确保能运行资源释放代码的地方就是在转载 2014-04-18 14:47:16 · 765 阅读 · 0 评论 -
boost.asio
boost.asio为异步IO提供了一份标准的C++的跨平台实现,特别针对网络IO提供了良好的支持,使之成为C++网络编程利器。关于如何使用asio,boost文档中已经有了详尽说明,而且附带的例子也很直观,我们不必再造轮子;本文则结合asio的基本应用,侧重于源代码的分析,特别是针对windows平台上的实现进行分析。 纵观asio源码,在统一的接口层之下,asio提供了大量的类来支持不同的转载 2014-06-19 13:16:57 · 1712 阅读 · 0 评论 -
线程安全的单例模式 .
老大一直说要用这个来做面试题,让面试的人来写一个线程安全的单例模式,感觉自己还没掌握,把 Head first--Design Patterns 找了出来,以下大部分内容抄袭自这本书,略有增删改。 1. 全局变量的缺点: 必须在程序一开始就创建好对象,如果程序在这次的执行过程中又一直没用到它,就非常耗费资源。 2. 经典的单例模式实现: Java转载 2014-07-15 13:27:22 · 582 阅读 · 0 评论 -
可重入函数与不可重入函数
可重入函数与不可重入函数转自:http://www.cppblog.com/franksunny/archive/2007/08/03/29269.html主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变转载 2014-07-15 13:33:23 · 628 阅读 · 0 评论 -
设计模式问答2
设计模式问答2介绍这是设计模式问答1的连载。在这个系列,我们将覆盖到解释器、迭代器、调停者、备忘录和观察者模式。如果你还没有阅读过我之前的系列,你可以随时从下面开始设计模式问答1:工厂模式,抽象工厂模式,构造者模式,原型模式,单例模式,命令模式设计模式问答3:状态模式,策略模式,访问者模式,适配器模式,享元模式设计模式问答4:桥接模式,组合模式,装饰者模式,外观转载 2015-01-06 16:57:35 · 691 阅读 · 0 评论 -
shared_ptr:资源管理利器
shared_ptr:资源管理利器如果你还在使用传统的C++,那么可以肯定堆内存的管理让你头痛过!在传统的C++领域,堆内存管理上我们能借用的现成工具就只有auto_ptr。但是很不幸用auto_ptr管理堆内存简直就是个错误。auto_ptr的问题可以归结为两点:不能配合STL容器一起使用。将auto_ptr置于容器中,就是个编译错误(如果是一个编译错误,你得感谢,还好编译期转载 2014-12-16 18:58:02 · 776 阅读 · 0 评论 -
STLFilt for VC6.0 安装工具
STLFilt for VC6.0 安装工具 【摘要】在《C++ Templates》(David Vandevoorde, Nicolai M.Josuttis)一书的6.6.1节中,介绍了一个过滤编译STL代码的错误信息的小工具:STLFilt(由 Leor Zolman 编写)。由于STL代码的错误和警告信息非常繁杂冗长(尤其在VC6.0中),不利于程序员阅读,所以这个转载 2014-12-09 16:34:42 · 789 阅读 · 0 评论 -
STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。 在使用 list、set 或 map遍历删除某些元素时可以这样使用:正确使用方法1 std::list List; std::l转载 2014-12-09 13:45:04 · 559 阅读 · 0 评论 -
C++之父谈关于C++的五个需要被重新认识的观点
C++之父谈关于C++的五个需要被重新认识的观点(中)标签:C/C++概述:学习和使用过C++的人几乎都曾经听说过下面的五个关于C++的描述,并且对这些话笃信不已,那么现在的情况是怎么样的呢?本文的作者——C++之父Bjarne Stroustrup将会对这些观点作逐一回击。本篇为中篇,探讨其中的第三个观点。C++之父谈关于C++的五个需要被重新认识的观点(转载 2014-12-30 09:15:45 · 684 阅读 · 0 评论 -
如何定位Android NDK开发中遇到的错误
如何定位Android NDK开发中遇到的错误摘要:Android NDK中的错误定位对很多开发者来说是一件头疼的事,本文通过一个Demo程序详细讲解了NDK的错误是如何产生的,以及如何通过命令行工具定位NDK的问题所在。Android NDK是什么?Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google转载 2014-12-31 12:54:17 · 593 阅读 · 0 评论 -
不定长内存池之apr_pool
不定长内存池之apr_pool内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术。内存池分类:1、 不定长内存池。典型的实现有apr_pool、obstack。优点是不需要为不同的数据类型创建不同的内存池,缺点是造成分配出的内存不能转载 2014-12-15 18:14:02 · 1341 阅读 · 1 评论 -
.NET设计模式系列文章
最初写探索设计模式系列的时候,我只是想把它作为自己学习设计模式的读书笔记来写,可是写到今天,设计模式带给我的震撼,以及许多初学者朋友的热心支持,让我下定决心要把这个系列写完写好,那怕花上再多的时间也无所谓。本部分内容不断更新中。目录计划:第Ⅰ部分 开篇开篇第Ⅱ部分 创建型模式篇第1章 单件模式(Single Pattern)第2章 抽象工厂模式(Abstract F转载 2015-06-17 18:35:54 · 441 阅读 · 0 评论 -
C++11标准后的C++阅读书目
C++ 新标准 C++11 的发布导致了大批新书的出现,还有一些经典书籍也进行了更新。Andrew Binstock 在 Dr.dobbs 上给大家推介一些学习 C++ 必需的核心书籍。 1. 《C++程序设计语言》英文第四版,作者: Bjarne Stroustrup这本书已经被正式列为C++编程的权威书籍。它堪称语言界的权威,独具特色,书面清晰,由设计C++的Strou转载 2015-07-14 09:04:11 · 1360 阅读 · 0 评论 -
C++内存管理变革
概述 C/C++最被人诟病的,可能是没有一个内存垃圾回收器(确切是说没有一个标准的垃圾回收器)。本文讨论的内容要点是,在C/C++中实现一个最袖珍的、功能受限的垃圾回收器。这个垃圾回收器区别于其他垃圾回收器的主要特征是: 1. 袖珍但具实用性。整个垃圾回收器代码行数100行左右(不含空白行),相当小巧。相对而言,它的功能也受到一定的限制。但是它在很多关键的场合恰恰非常有用。该垃转载 2014-12-15 17:02:44 · 599 阅读 · 0 评论 -
函数对象
尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象。函数对象(也称“算符”)是重载了“()”操作符的普通类对象。因此从语法上讲,函数对象与普通的函数行为类似。 用函数对象代替函数指针有几个优点,首先,因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更富有弹性。函数对象也具备有存储先前调用结果的数据成员。在使用普通函数时需要将先前调转载 2014-11-24 17:09:54 · 638 阅读 · 0 评论 -
C++文件读写详解
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:#include ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中fstrea转载 2014-09-05 09:40:17 · 564 阅读 · 0 评论 -
内存的堆分配和栈分配
内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结堆和栈的区别一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配转载 2014-08-21 18:51:06 · 677 阅读 · 0 评论 -
const与#define比较
const与#define比较首先是#define的优点: 宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。用宏来代表常数,好处是:)1. 让代码更简洁明了)2. 方便代码的维护 对宏的处理,在编译过程中称为“预处理”。也就是说在正式编译前,编译器必须先将代码出现的宏,用其相应的宏值替换。 看了好多网上的资料,发现说法相当多转载 2014-08-21 20:05:04 · 477 阅读 · 0 评论 -
C++ 中 ZeroMemory、memset 危险需慎用
C++ 中 ZeroMemory、memset 危险需慎用使用C/C++编程时,常使用ZeroMemory、memset或 “={0}”来对结构体对象进行初始化或清零。然而这三种方式都有各自的特点,使用时需谨慎,否则容易出现严重错误,本人今日解决一个导致宕机的bug,查了几小时,才发现是由同事乱用ZeroMemory所致。于是搜集资料,撰此文以共勉。memset转载 2014-09-22 11:42:54 · 604 阅读 · 0 评论 -
Cppcheck 1.54 C/C++静态代码分析工具
Cppcheck 1.54 C/C++静态代码分析工具Cppcheck是一个C/C++代码分析工具,只检测那些编译器通常无法检测到的bug类型。 官方上建议让编译器提供尽量多的警告提示:1.使用Visual C++的话,应使用警告等级42.使用GCC的话,参看Warning options - using GCC 官方地址:http://cppche转载 2014-08-19 14:42:25 · 874 阅读 · 0 评论