随笔分类 -  c++

摘要:很多初学者分不清楚 vector 容器的容量(capacity)和大小(size)之间的区别,甚至有人认为它们表达的是一个意思。本节将对 vector 容量和大小各自的含义做一个详细的介绍。vector 容器的容量(用 capacity 表示),指的是在不分配更多内存的情况下,容器可以保存的最多元素 阅读全文
posted @ 2020-02-28 14:17 oayx 阅读(15438) 评论(0) 推荐(2) 编辑
摘要:霍夫曼编码(Huffman Coding)是一种编码方法,霍夫曼编码是可变字长编码(VLC)的一种。 霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码 阅读全文
posted @ 2018-03-28 10:35 oayx 阅读(1301) 评论(1) 推荐(0) 编辑
摘要:6、双端队列deque 所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速。而在中间插入元素则会比较费时,因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型,提供了在序列两端快速插入和删除操作的功能,它可以在需要的时候改变自身大小 阅读全文
posted @ 2018-03-27 17:17 oayx 阅读(453) 评论(0) 推荐(0) 编辑
摘要:昨天阿楠发现了项目中的一个 bug ,是因为浮点运算的前后不一致导致的。明明是完全相同的 C 代码,参数也严格一致,但是计算出了不相同的结果。我对这个现象非常感兴趣,仔细研究了一下成因。 原始代码比较繁杂。在弄清楚原理后,我简化了出问题的代码,重现了这个问题: static void foo(flo 阅读全文
posted @ 2017-09-02 18:41 oayx 阅读(1216) 评论(0) 推荐(0) 编辑
摘要:一 预备知识1,字符:字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。“中”“国”这是两个汉字字符。字符仅仅代表一个符号,没有任何实际值的意义。2,字符集:字符集是字符的集合。例如,汉字字符... 阅读全文
posted @ 2015-05-06 13:32 oayx 阅读(2356) 评论(0) 推荐(0) 编辑
摘要:http://code.google.com/p/gperftools/downloads/listTcmalloc通过preload或者直接动态链接的方式对malloc等内存分配和释放函数进行截获并提供服务。Tcmalloc提供接口主要涵盖malloc.h的接口使用要使用TCMalloc,只要将tcmalloc通过“-ltcmalloc”链接器标志接入你的应用即可。你也可以通过使用LD_PRELOAD在不是你自己编译的应用中使用tcmalloc:$ LD_PRELOAD=”/usr/lib/libtcmalloc.so”LD_PRELOAD比较讨巧,我们也不十分推荐这种用法。TCMalloc 阅读全文
posted @ 2013-11-11 12:27 oayx 阅读(8709) 评论(0) 推荐(0) 编辑
摘要:转自http://www.feng5166.com/blog/424.htmlgoogle的开源项目值得我们一用的,这些项目很有意义,甚至可以直接用在我们自己的工作上!学习编程的的一个比较好的方式就是阅读优秀项目的源代码,从而能够了解作者的方法、思路、技巧,另外阅读源代码对于一些朋友是枯燥乏味的,这是就可以看看项目的readme,找到项目的闪光点,我们不做开拓者那我们就做实践者和使用者,呵呵,下面是这些项目的列表,在这里存档,已备今后查阅之用文本文件处理:Google CRUSH (Custom Reporting Utilities for SHell)CRUSH是为命令行或shell sc 阅读全文
posted @ 2013-06-20 11:03 oayx 阅读(1301) 评论(0) 推荐(0) 编辑
摘要:在如下的库支持下,开发的系统可以很方便移植到当前大部分平台上运行 而无需改动,只需在对应的平台下 用你喜欢的编译器 重新编译即可经典的C++库 STLport-------SGI STL库的跨平台可移植版本,在以前有些编译器离符合 标准比较远的情况下 那时还是有用的,当然目前vc71已经比较接近标准了, 故目前不怎么用它了。 Boost---------准标准库, 功能强大 涉及能想的到的大部分非特别领域的算法, 有一个大的C++社区支持 WxWindows-----功能强大的跨平台GUI库 ,它的功能和结构都类似 MFC,故原则上 可以通过WxWindows把现有MFC程序移植到... 阅读全文
posted @ 2013-06-19 22:36 oayx 阅读(1359) 评论(0) 推荐(0) 编辑
摘要:摘要:本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主 阅读全文
posted @ 2013-05-15 12:50 oayx 阅读(677) 评论(0) 推荐(0) 编辑
摘要:本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终没有彻底解决,它们可能严重影响应用程序,并且很少有开发团队对其制定明确的管理计划。但好消息是,它们并不怎么神秘。引言C 和 C++ 程序中的内存错误非常有害:它们很常见,并且可能导致严重的后果。来自计算机应急响应小组(请参见参考资料)和供应商的许多最严重的安全公告都是由简单的内存错误造成的。自从 70 年代末期以来,C 程序员就一直讨论此类错误,但其影响在 2007 年仍然很大。更糟的是,如果按我的思路考虑,当今的许多 C 和 C++ 阅读全文
posted @ 2013-05-04 18:57 oayx 阅读(1472) 评论(0) 推荐(0) 编辑
摘要:本文将对 Linux? 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工的、半手工的以及自动的内存管理实践的基本概念。追溯到在 A 阅读全文
posted @ 2013-05-04 18:56 oayx 阅读(682) 评论(0) 推荐(0) 编辑
摘要:C++11,先前被称作C++0x,即ISO/IEC 14882:2011,是目前的C++编程语言的正式标准。它取代第二版标准ISO/IEC 14882:2003(第一版ISO/IEC 14882:1998公开于1998年,第二版于2003年更新,分别通称C++98以及C++03,两者差异很小)。新的标准包含核心语言的新机能,而且扩展C++标准程序库,并入了大部分的C++ Technical Report 1程序库(数学的特殊函数除外)。最新的消息被公开在 ISO C++ 委员会网站(英文)。ISO/IEC JTC1/SC22/WG21 C++ 标准委员会计划在2010年8月之前完成对最终委员会 阅读全文
posted @ 2013-05-04 18:47 oayx 阅读(2964) 评论(0) 推荐(0) 编辑
摘要:Q: What are '__FILE__' and '__LINE__'?A: '__FILE__' and '__LINE__' are predefined macros and part of the C/C++ standard. During preprocessing, they are replaced respectively by a constant string holding the current file name and by a integer representing the current l 阅读全文
posted @ 2013-04-17 20:41 oayx 阅读(1459) 评论(0) 推荐(0) 编辑
摘要:1、工作现场代码:[cpp] view plaincopyprint?typedef MyData { int data1; int data2; } * LPMYDATA; const LPMYDATA pData = getData(); // do sth else pData = getNewData(); // compile error typedef MyData{ int data1; int data2;} * LPMYDATA;const LPMYDATA pData = getData();// do sth elsepData = getNewData... 阅读全文
posted @ 2013-04-13 23:56 oayx 阅读(686) 评论(0) 推荐(0) 编辑
摘要:英文字母:字节数 : 1;编码:GB2312字节数 : 1;编码:GBK字节数 : 1;编码:GB18030字节数 : 1;编码:ISO-8859-1字节数 : 1;编码:UTF-8字节数 : 4;编码:UTF-16字节数 : 2;编码:UTF-16BE字节数 : 2;编码:UTF-16LE中文汉字:字节数 : 2;编码:GB2312字节数 : 2;编码:GBK字节数 : 2;编码:GB18030字节数 : 1;编码:ISO-8859-1字节数 : 3;编码:UTF-8字节数 : 4;编码:UTF-16字节数 : 2;编码:UTF-16BE字节数 : 2;编码:UTF-16LE可以通过代码看出 阅读全文
posted @ 2013-04-12 19:54 oayx 阅读(10053) 评论(0) 推荐(2) 编辑
摘要:Linux上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。一、利用iconv函数族进行编码转换iconv函数族的头文件是iconv.h,使用前需包含之。#include <iconv.h>iconv函数族有三个函数,原型如下:1) iconv_t iconv_open(const char *tocode, const char *fromcode);此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。( 阅读全文
posted @ 2013-04-12 16:48 oayx 阅读(7015) 评论(1) 推荐(0) 编辑
摘要:strcpy_s和strcpy()函数的功能几乎是一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。三个参数时:errno_t strcpy_s(char *strDestination,size_t numberOfElements,const char *strSource);两个参数时:errno_t strcpy_s(char (&strDestinatio 阅读全文
posted @ 2013-03-28 09:41 oayx 阅读(707) 评论(0) 推荐(0) 编辑
摘要:http://www.awuit.com/c-language-the-usage-of-long-long/ 在分析BT代码的过程中,遇到了这样的定义:long long line_position;很是纳闷,在C语言中我还没有见过这样的写法,网上搜了,资料也很少,最后在C语言标准与实现这本书中找到了关于long long的说法。在C语言的C99标准扩展了新的整数类型 long long,long是32位宽,占4个字节,long long通常被定义成 64 位宽,也就可以实现了在32位机器上可以扩展8字节的数据,GUN C也支持,当然在64位平台上就存在这个问题了。C99标准并没有硬性规定具 阅读全文
posted @ 2013-03-28 09:17 oayx 阅读(1355) 评论(0) 推荐(0) 编辑
摘要:本文主要总结创建、结束线程和WIN32 API提供的一些线程同步方法。同步方法包括用户态同步方式:InterLock、CriticalSection、SRWLock和内核态同步方式:Event、Semaphore、Mutex等。本文通过简单的例子演示API的使用,没有包含原理的说明,假定读者具有其他语言或者平台的并发编程经验。创建、结束线程WIN32 API虽然提供了CreateThead和ExitThread方法,但是在C++中,永远不应该使用这两个方法创建或结束线程。而应该使用VC++提供的_beginthread、_beginthreadex方法,相应的结束线程方法_endthread、 阅读全文
posted @ 2012-01-29 10:56 oayx 阅读(808) 评论(0) 推荐(0) 编辑
摘要:CRC原理及其逆向破解方法 介绍: 这篇短文包含CRC原理介绍和其逆向分析方法,很多程序员和破解者不是很清楚了解CRC的工作原理,而且几乎没人知道如何逆向分析它的方法,事实上它是非常有用的.首先,这篇教程教你一般如何计算CRC,你可以将它用在数据代码保护中.第二,主要是介绍如何逆向分析CRC-32,你可以以此来分析程序中的CRC保护(象反病毒编码).当然有很多有效的工具用来对付CRC,但我怀疑它是否会说明原理. 我要告诉你,这篇短文里中应用了很多数学知识,这不会影响一些人,而且会被一般的 程序员与逆向分析者很好理解.为什么?那么如果你不知道数学是如何被应用在CRC中, 我建议你可以停止... 阅读全文
posted @ 2012-01-01 09:53 oayx 阅读(10640) 评论(0) 推荐(0) 编辑