C++
文章平均质量分 72
会飞行的小蜗牛
这个作者很懒,什么都没留下…
展开
-
四种进程或线程同步互斥的控制方法
现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。 这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 一书中可以找到更加详细的解释 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协转载 2012-04-30 17:20:33 · 530 阅读 · 0 评论 -
浅谈C++容器
什么是容器首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案”。转载 2012-05-03 10:23:56 · 260 阅读 · 0 评论 -
关于数据库排序算法总结
1. 内部排序插入类排序直接插入排序折半插入排序希尔排序交换类排序冒泡排序快速排序选择类排序简单选择排序树型选择排序堆排序归并排序分配类排序多关键字排序链式基数原创 2012-05-03 22:33:22 · 1777 阅读 · 0 评论 -
大数运算 编程
1. 大数加法 很简单就不说了2. 大数乘法基本原理: 1,把两个数字 a 和 b 转换成字符,放到字符数组里;或者把数字的每一位隔离开分别放到数组里作为一位,这样更方便乘法处理。这样做的根本好处是:相乘的时候不会造成溢出。2,结果数组的长度,最大应该是 a 的长度+ b 的长度 + 1,所以定义一个这样的数组;3,过程很简单了:a 中的第i原创 2012-05-04 10:46:12 · 543 阅读 · 0 评论 -
查找字典中单词变位词 方法
解决这个问题的许多方法都出奇地低效和复杂。任何一种考虑单词中所有字母的排列的方法都注定了要失败。 eg:单词 “cholecystoduodenostomy” 有 22!(= 1.124*10^21) 种排列即使以闪电一样的速度第百亿分之一秒执行一种排列,也要消耗 1.1*10^9 秒。 秒就是一个纳世纪,则 1.1*10^9 秒就是数十年原创 2012-05-07 11:02:24 · 1695 阅读 · 0 评论 -
float与零值比较
#include using namespace std;int main( void ){ const float EPSINON = 0.00001; const float A = 0.000; if ((A >= - EPSINON) && (A <= EPSINON)) { cout << "equal" << en原创 2012-05-09 19:46:38 · 562 阅读 · 0 评论 -
C标准库中的快速排序(quick-sort)函数 [简单应用]
#include #include using namespace std;const size_t INDEX_ZERO = 0;int com(const void *a,const void *b){ return *(int*)a - *(int*)b;}void display( const int* array, size_t size ){ if (原创 2012-05-09 19:50:45 · 1501 阅读 · 0 评论 -
access函数测试指定路径中是否有某个文件存在
#include #include #include using namespace std;//文件是否存在 int file_exists(char *filename) { return (access(filename, 0) == 0); } int main( void ){ printf("E盘有a.txt文件吗?: %s\n", f原创 2012-05-09 19:52:47 · 697 阅读 · 0 评论 -
stringstream把double转化为string
#include#include#includeusing namespace std;int main( void ){ double i = 12.345; stringstream s;//流格式化符,把double转化为string s << i; string str = s.str(); //string类型的字符串 cout << str << en原创 2012-05-10 08:44:52 · 1272 阅读 · 0 评论 -
STL中的二分查找(binary_search)
STL中对于有序序列(vector,list等)提供了相当相当强大的二分搜索Binary search算法。对于可以随机访问容器(如vector等),binary search负载度为对数级别(LogN),对于非随机访问容器(如list),则算法复杂度为线性。现在简要介绍一下几种常用的binary search算法:Iterator lower_bound (Iterator first,原创 2012-05-10 09:17:42 · 4157 阅读 · 1 评论 -
使用系统排序算法对自定义结构体数组排序方法
一、自定义结构体中的变量是 int 、usigned int 等类型时有如下三种方法#include "stdafx.h"#include #include #include #include using namespace std;//for_each 的谓词,为了输出不同的对象, 这里利用了函数对象templateclass Display: public b原创 2012-05-09 19:02:52 · 781 阅读 · 0 评论 -
取址运行符是取指针的地址而不是取指针所指变量的地址
#include using namespace std;int main( void ){ int a = 2002; int *p = &a; int *pp = &a; cout << (p == pp) << endl; cout << (&p == &pp) << endl; system( "PAUSE" ); return EXIT_SUCCESS;}原创 2012-05-09 19:48:57 · 682 阅读 · 0 评论 -
trim()函数:仅仅改变指针指向,没有删除及移动字符,提高了效率
#include using namespace std;const char NULL_TERMINATED = '\0';const int ONE_ELEMENT = 1;//删除字符串两端的所有空格 char *my_trim( char *str ){ if (NULL == str) { throw; }原创 2012-05-09 19:49:30 · 340 阅读 · 0 评论 -
C标准库快速排序函数:升(降)序排序
#include #include using namespace std;const size_t INDEX_ZERO = 0;//升序比较:第一个元素比第二个元素大返回正数(这是元素需要交换的条件) int compare_rise(const void *a,const void *b){ return *(int*)a - *(int*)b;}//降序比较:第二原创 2012-05-09 19:51:16 · 2256 阅读 · 0 评论 -
STL链表list和向量vector的通用输出函数
#include #include #include #include using namespace std;templatevoid display( TYPE& obj ){ for (typename TYPE::iterator iter = obj.begin( ); iter != obj.end( ); ++iter) { c原创 2012-05-10 08:42:47 · 654 阅读 · 0 评论 -
unexpected end of file while looking for precompiled header directive
在编译VC++6.0是,出现fatal error C1010: unexpected end of file while looking for precompiled header directive 的错误.解决方法:1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的 Settings,选择C/C++选项卡,从Category组合框中转载 2012-05-10 10:14:55 · 973 阅读 · 0 评论 -
stl string常用函数
具体函数的说明请看代码下面的详细讲解string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length转载 2012-05-09 18:50:19 · 345 阅读 · 0 评论 -
C++中文件读写操作
fstream 提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。ifstream -- 从已有的文件读ofstream -- 向文件写内容fstream - 打开文件供读写文件打开模式:ios::in 读ios::out 写ios::app 从文件末尾开始写ios:原创 2012-05-09 19:24:21 · 1612 阅读 · 0 评论 -
C库中的二分法搜索函数
#include #include using namespace std;int my_compare( const int *first, const int *second ){ return (*first - *second);}int main( void ){ const int buf[] = {1, 2, 3, 4, 5, 6, 7, 8, 9,原创 2012-05-09 19:42:42 · 554 阅读 · 0 评论 -
void*不是指向对象的类型(这种类型的指针不能指向一个实体)
#include using namespace std;int main( void ){ int cpp = 2002; void *p = &cpp; //cout << *p << endl; //`void*' is not a pointer-to-object type //void*指针不是指向对象的类型(也就是这种类原创 2012-05-09 19:43:31 · 8647 阅读 · 0 评论 -
允许int*到void*的转换,反之不亦然:无效的转换invalid conversion from `void*' to `int*'
#include using namespace std;int main( void ){ int cpp = 2002; int *pCpp = &cpp; void *pVoid = &cpp; //可以从int*到void*的转换 //int *pInt = pVoid; //不能从void* 到int*的转换原创 2012-05-09 19:44:06 · 5876 阅读 · 0 评论 -
void*参数函数的const和非const重载函数版本
#include using namespace std;void func( void *p ){ cout << "非const版本" << endl;}void func( const void *p ){ cout << "const版本" << endl;}int main( void ){ const int cpp = 2002;原创 2012-05-09 19:44:40 · 562 阅读 · 0 评论 -
测试memcpy()函数有没有在串结尾添加结束符
#include using namespace std;int main( void ){ const size_t SIZE = 5; const char NULL_TERMINATED = '\0'; char buf[128]; memcpy( buf, "123456789", SIZE ); //buf[SIZE]原创 2012-05-09 19:45:22 · 4386 阅读 · 1 评论 -
定义宏计算数组长度
#include using namespace std;#define ARRAY_SIZE( ARRAY ) (sizeof (ARRAY) / sizeof (ARRAY[0]))int main( void ){ int a[] = {1, 2, 3, 4, 5}; cout << ARRAY_SIZE( a ) << endl; char b[]原创 2012-05-09 19:45:58 · 5915 阅读 · 0 评论 -
实现atof()函数原型:数字串转换成双精度浮点double
#include using namespace std;const char NULL_TERMINATED = '\0';const char POINT = '.';const int ONE = 1;//const int ZERO = 0;const int TEN = 10;const int CHAR_MORE_THAN_INT = '0' - 0;const原创 2012-05-10 08:37:22 · 3992 阅读 · 0 评论 -
stringstream流格式化符,把int转化为string,string又可以转为C语言风格的字符串
#include#include#includeusing namespace std;int main( void ){ int i = 12345; stringstream s;//流格式化符,把int转化为string s << i; string str = s.str(); //等到string类型的字符串 cout << str << endl;原创 2012-05-10 08:44:15 · 918 阅读 · 0 评论 -
测试排序函数常用的三个数组:顺序、逆序和乱序
#includeusing namespace std;const int INDEX_ZERO = 0;//稀尔排序 void shell_sort( int *array, int size ){ if (NULL == array) { throw; } else {原创 2012-05-10 08:46:47 · 1052 阅读 · 0 评论 -
检查Email地址的合法输入[几乎可以用于实现开发当中]
#include using namespace std;const int INT_ZERO = 0;const int INDEX_ZERO = 0;const int INT_ONE = 1;const int INDEX_ONE = 1;const int HAS_NO_ELEMENT = 0;const int MAX_LENGTH = 30;const char原创 2012-05-10 08:50:56 · 1114 阅读 · 0 评论 -
STL中binary_search 演示
#include "StdAfx.h"#include #include #include #include #include using namespace std;int main(){ vector v; vector::iterator iter; pair::iterator, vector::iterator> vecpair; f原创 2012-05-10 10:13:52 · 513 阅读 · 0 评论 -
main()函数的参数:本程序的详细路径(包括完整的文件名)
#include using namespace std;int main(int argc, char** argv) { for (int i=0; i<argc; ++i) { cout << argv[i]; } cout << endl; system( "PAUSE" ); return EXIT_SU原创 2012-05-09 19:47:12 · 594 阅读 · 0 评论 -
去掉字符串左边的所有空格
#include using namespace std;//去掉字符串左边的所有空格 char *my_trim( char *str ){ const char NULL_TERMINATED = '\0'; if (NULL == str) { throw; } char *co原创 2012-05-09 19:47:47 · 1227 阅读 · 0 评论 -
删除字符串右边的全部空格
#include using namespace std;//删除字符串右边的全部空格 char *my_trim( char *str ){ if (NULL == str) { throw; } char *const address = str; const int ONE_ELEMENT原创 2012-05-09 19:48:18 · 1378 阅读 · 0 评论 -
void声明空参数表,main()函数的参数也可以用void填充表示没有参数
#include using namespace std;//void 声明空参数表void func( void ){}//包括main()函数的参数也可以用void填充int main( void ){ system( "PAUSE" ); return EXIT_SUCCESS;}/*-------------/////////////////////原创 2012-05-09 19:50:12 · 1612 阅读 · 0 评论 -
qsort对字符串排序
#include #include using namespace std;const size_t INDEX_ZERO = 0;//升序比较:第一个元素比第二个元素大返回正数(这是元素需要交换的条件) int compare_rise(const void *a,const void *b){ return *(char*)a - *(char*)b;}//降序比较:原创 2012-05-09 19:52:11 · 1254 阅读 · 0 评论 -
ecvt把一个浮点数转换为字符串
#include #include #include int main(void) { double value= -8.6789e5; int dec, sign; int ndig = 5; char *p = ecvt(value,ndig,&dec,&sign); printf("string = %s dec = %d原创 2012-05-10 08:36:32 · 338 阅读 · 0 评论 -
通用数组初始化函数 通用数组打印函数
#include #include using namespace std;typedef unsigned int size_t;// 通用数组初始化函数 templatevoid initArray( TYPE* array, size_t size, const TYPE& val = 0 ){ assert( array != NULL ); for原创 2012-05-10 08:39:28 · 425 阅读 · 0 评论 -
写一个迭代器封装list的push_front()使得:用法不同,功能相同
#include #include #include using namespace std;template class Iterator{public: Iterator( TYPE &c) : curr( &c ) { } Iterator &operator = (const typename TYPE::value_type v原创 2012-05-10 08:42:01 · 706 阅读 · 0 评论 -
合并两个集合元素:遵循集合元素不重复的原则,已经存在的元素不再插入
#include using namespace std;const int INT_ZERO = 0;const int INDEX_ZERO = 0;const int INDEX_ONE = 1;bool inBuf( int *array, int size, int key ){ if (NULL == array) { t原创 2012-05-10 08:49:12 · 971 阅读 · 0 评论 -
关键字插入哈稀表,规则:元素值与桶下标相同
#include using namespace std;const int INDEX_ZERO = 0;const int INDEX_ONE = 1;const int INT_TWO = 2;const int INT_ZERO = 0;void display( int *array, int size ){ if (NULL == array) {原创 2012-05-10 08:55:46 · 393 阅读 · 0 评论 -
STL 之查找 算法选择 分析
正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range 本文是对Effective STL第45条的一个总结,阐述了各种查找算法的异同以及使用他们的时机。首先可供查找的算法大致有count,find,binary_search,lower_bound,upper_bound,equal_rang转载 2012-05-10 08:58:36 · 524 阅读 · 0 评论