![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
wbj1234566
生于忧患,而死于安乐也
展开
-
C 规则表达式入门
用过Perl的朋友应该都它提供了规则表达式功能,所以使得用perl 进行文本处理非常方便。本人最近试用了一下 GNU C 的规则表达式功能, 发现使用起来也很简单,只是觉得支持的不够强大,不能够进行文本的替换,只能进行文本的查找,至少目前我是 没有发现基于规则表达式的 文本替换功能。 下面我就简单的介绍一下GNU C 的规则表达式原创 2007-07-19 19:12:00 · 802 阅读 · 0 评论 -
有限状态机 泛型编程
有限状态机之泛型编程Generic programming of finite state machine 关于有限状态机:不 想奢谈高深的理论,理论太过高深有可能编程实现么?我觉得可以这么简单理解吧,一个对象有多个状态(注意这里的“对象”与“状态”都是广义与抽象的),通 过事件(event)的触发使得状态(state)之间相互跃迁(transition),可以定义在状态切转载 2008-06-13 17:37:00 · 1259 阅读 · 0 评论 -
ue c++ 设置
打开配置UE对话框的操作是:Advanced -> Configuration...在左边的分支中找到Editor把Auto-complete中的Show auto...一项选中,开启自动完成功能,我感觉比VC的也不差!在Word Warp/Tab Settings里可以调整Tab与空格的比例,有些跨平台的项目要求只能用空格、不能用Tab。在左边的分支中找到Editor DisplayCode F转载 2008-09-13 14:15:00 · 5081 阅读 · 0 评论 -
C++的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include void转载 2008-09-23 17:46:00 · 476 阅读 · 0 评论 -
C++中const总结
一、对于基本声明1.const int r=100; //标准const变量声明加初始化,因为默认内部连接所以必须被初始化,其作用域为此文件,编译器经过类型检查后直接用100在编译时替换。2.extend const int r=100; //将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义。3.const int转载 2008-09-29 17:12:00 · 591 阅读 · 0 评论 -
C /C++语言中const与volatile
1. 在C语言中,const的意思是“一个不能被改变的普通变量”,它总是占用存储空间而且它的名字是全局的。C编译器不能把const堪称一个编译器间的常量。所以在C中你可以这么写: const int bufsize;//不赋值。 但不能这么写: cosnt bufsize = 100; char buf[bufsize]; //因为bufsize不是常量。 (但是在C++里,上面两种情况正好反过来转载 2008-11-07 15:13:00 · 665 阅读 · 0 评论 -
位运算常用操作总结
位运算应用口诀 清零取反要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 2 " 3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。 4 ">>>"运算符,右边的位被挤掉,对于左边移出的空位一概补上0。 位运算符的转载 2009-01-16 20:02:00 · 535 阅读 · 0 评论 -
红黑树的实现源码(第二次修订版)
我曾经写过两个两个红黑树的实现, 分别在:http://www.cppblog.com/converse/archive/2006/10/07/13413.htmlhttp://www.cppblog.com/converse/archive/2007/11/28/37430.html最近因为要给ccache加入红黑树的支持, 找出来曾经实现的代码作为参考, 这才发现原来的实现都是有问题的,也怪我转载 2008-11-22 11:18:00 · 485 阅读 · 0 评论 -
B树算法
这个结构一般用于数据库的索引,综合效率较高。 另外还有一种与此类似的树结构叫B+树,像 Berkerly DB , sqlite , mysql 数据库都使用了B+树算法处理索引。 这两种处理索引的数据结构的不同之处: 1。B树中同一键值不会出现多次,并且它有可能出现在叶结点,也有可能出现在非叶结点中。而B+树的键一定会出现在叶结点中,并且有可能在非叶结点中也有可能重复出现,以维持B+树的平衡。转载 2008-12-02 11:44:00 · 815 阅读 · 0 评论 -
关于 regcomp()、regexec() 正则表达式的问题
这两个函数调用起来很诡异呢,有人知道正确的调用方法吗? --------------------------------------------------------------- 1.int regcomp (regex_t *compiled, const char *pattern, int cflags) 这个函数把指定的规则表达式pattern编译成一种特定的数据格式compiled,转载 2008-12-01 17:08:00 · 2233 阅读 · 1 评论 -
C++语言中使用setjmp与longjmp的注意点
本文来自:http://se.csai.cn/ExpertEyes/200801031127361391.htm在《第16集 C语言中一种更优雅的异常处理机制》中,就已经提到过,“setjmp和longjmp并不能很好地支持C++中面向对象的语义。因此在C++程序中,请使用C++提供的异常处理机制”。它在MSDN中的原文如下: setjmp and longjmp do not supp转载 2009-05-01 10:20:00 · 1699 阅读 · 1 评论 -
linux 下的proxyd
转载 2009-05-30 17:27:00 · 1018 阅读 · 1 评论 -
若干经典的字符串哈希函数
// RS Hash Function unsigned int RSHash( char * str) { unsigned int b = 378551 ; unsigned int a = 63689 ; unsigned int hash = 0 ; while ( * str)转载 2009-06-28 12:31:00 · 701 阅读 · 2 评论 -
memcpy 与 strncpy的区别
void *memcpy(void *dest, void *src, unsigned int count); 1 由src所指内存区域复制count个字节到dest所指内存区域2 src和dest所指内存区域不能重叠,函数返回指向dest的指针。 char *strncpy(char *dest, char *src, int原创 2009-09-15 20:06:00 · 1108 阅读 · 2 评论 -
g++ 类模板编译方法
在使用gcc64-4.1.2中的g++编译使用模板的程序时,模板类的声明和实现都要放到同一个文件中才可以编译通过,如果将声明与实现分别放在不同的文件中 编译无法通过,这点和hp unix的aCC 和 ibm aix的xlC是有差别的原创 2009-09-19 10:28:00 · 1610 阅读 · 0 评论 -
两种面向对象的C++线程模型
摘要:本文首先分析对比了Java、C#的线程模型,然后在C++中实现了类似Java的轻量级线程模型CJThread/IRunable,并在此基础上利用模板和operator->*实现类似C#的线程模型CCSharpThread。本文重点推荐CCSharpThread模型,它不仅是类型安全的,还能将任意一个原型为DWORD()的公有非静态类成员方法作为线程方法。关键词:C++;模板;oper转载 2008-08-27 10:30:00 · 683 阅读 · 0 评论 -
C++的 RTTI 观念和用途
C++的 RTTI 观念和用途 自从1993年Bjarne Stroustrup 〔注1 〕提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(exceptionhandling)需要RTTI;最近新推出的C++ 或多或少已提供RTTI。然而,若不小心使用RTTI,可能会导致转载 2008-08-27 10:24:00 · 502 阅读 · 0 评论 -
unix linux 文件锁
有三种不同的文件锁,这三种都是“咨询性”的,也就是说它们依靠程序之间的合作,所以一个项目中的所有程序封锁政策的一致是非常重要的,当你的程序需要和第三方软件共享文件时应该格外地小心。有些程序利用诸如 FIlENAME.lock的文件锁文件,然后简单地测试此类文件是否存在。这种方法显然不太好,因为当产生文件的进程被杀后,锁文件依然存在,这样文件也许会被永久锁住。UUCP中把产生文件的进程号转载 2008-08-27 10:36:00 · 4144 阅读 · 0 评论 -
va_start() va_end()函数应用
va_start() va_end()函数应用1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#include void fun(int a, ...) { int *temp = &a; temp++; for原创 2007-09-19 16:36:00 · 644 阅读 · 0 评论 -
关于C++中友元类和友元函数的示例讲解
简单的讲 :把类外部的类或函数声明为友元类和友元函数,使其能直接访问类中的私有成员。格式: friend 类 或 函数 声明//此语句可以放在类中的任意位置,与访问权限保留字无关。需要注意几个方面:1.友元关系是不可以传递的。 比方说你是我的友元而Joe是你的友元,但这并不意味着Joe是我的友元。2.友元关系不能继承。3.友元关系不是互通。把class A设置为c原创 2008-04-07 12:33:00 · 1902 阅读 · 0 评论 -
简单常识——关于string
oupper, tolower地球人都知道 C++ 的 string 没有 toupper ,好在这不是个大问题,因为我们有 STL 算法:string s("heLLo");transform(s.begin(), s.end(), s.begin(), toupper);cout transform(s.begin(), s.end(), s.begin(), tolower);cout 当然原创 2008-04-07 12:36:00 · 836 阅读 · 2 评论 -
C/C++字符串处理(4):std::vector与std::StringBuilder
C/C++字符串处理(4):std::vector与std::StringBuilder原创 2008-04-07 12:37:00 · 861 阅读 · 0 评论 -
内 存 编 程
1. 内存分配方式1.1 内存分配的几种方式(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。(2) 在栈上创建。在执行函数时,函数的参数值,内局部变量的存储单元都可以在栈上创建。函数执行结束时转载 2008-04-16 13:24:00 · 900 阅读 · 0 评论 -
C++内存管理
C++内存管理 [导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放转载 2008-04-16 13:26:00 · 2807 阅读 · 2 评论 -
c++模板类的模板类友元示例
public.h#include#ifndef _PUBLIC_H_#define _PUBLIC_H_template class second;templateclass first{ public: first(T tmp); ~first(); template void put(se原创 2008-04-16 13:20:00 · 715 阅读 · 0 评论 -
c++ stl list 迭代器简单实现
#includetemplateclass node{ public: T data; void * pre; void * next;};templateclass iter{ public: typedef node * lnode; lnode pnode; iter(iter& a):pnode原创 2008-07-16 14:11:00 · 3927 阅读 · 0 评论 -
用occi函数封装的连接池类
class mConnectionPool{ public:mConnectionPool(); ~mConnectionPool(); int connectDB(char *userName,char *userPassWord,char *dbName); Connection * ge原创 2008-07-29 09:46:00 · 4001 阅读 · 0 评论 -
occi 存储过程
以下是主要部分代码sprintf(sql,"begin mytest.test(:1); end;"); stmt->setSQL(sql);stmt->registerOutParam(1, OCCICURSOR);stmt->execute();ResultSet *rs=stmt->getCursor(1);原创 2008-07-29 10:01:00 · 1349 阅读 · 0 评论 -
unix 下多线程导出数据的pro c++程序
一个简单的oracle pro c/c++多线程导出程序#include #include #include #include #include #include #include #include #include #include #include #include #include#includeEXEC SQL INCLUDE sqlca;EXEC SQL BEGIN DECLARE SE原创 2008-05-27 15:25:00 · 1222 阅读 · 0 评论 -
unix 多进程下的生产者和消费者实现
#include#include#include#include#include #include#include#include #includetypedef struct{ int buf[129]; int occupied; int nextin; int nextout; pthread_mutex_t mutex;原创 2008-05-27 15:33:00 · 1623 阅读 · 1 评论 -
unix/linux socket write函数的封装
int writecnta(int &sock,char *buf){ int length; int wlength; int tmpLength; tmpLength=0; length=strlen(buf); while(tmpLength != length) { wlength=write(sock,&buf[tmpLength]原创 2008-05-27 15:43:00 · 2905 阅读 · 0 评论 -
unix/linux socket read函数的封装
int readcnta(int curSock,char * buff,int length){int ret;int i;int templen;int l_length;ret=0;l_length=length;while(ret!=l_length){ templen=read(curSock,&buff[ret],length-ret); if(templen原创 2008-05-27 15:42:00 · 3513 阅读 · 0 评论 -
错误代码errno
linux下的error.h/* errno is not a global variable, because that would make using it non-reentrant. Instead, its address is returned by the function __errno. */#ifndef _SYS_ERRNO_H_#ifdef __cpluspl转载 2009-10-23 23:27:00 · 1141 阅读 · 0 评论