能力值:
( LV9,RANK:290 )
|
-
-
2 楼
沙发~~~~~~`
支持猪兄!~~`````````
|
能力值:
( LV9,RANK:210 )
|
-
-
3 楼
你把源开在这边,给你加个精
|
能力值:
( LV6,RANK:90 )
|
-
-
4 楼
了不起的猪头三创造,全面开发,就这一个.
|
能力值:
( LV8,RANK:130 )
|
-
-
5 楼
哈哈
可惜我自己贡献的接口太小了.
|
能力值:
( LV10,RANK:170 )
|
-
-
6 楼
呵呵,你也来了?
没事,等你有时间了,写个更加牛的。 最重要的是创新~~~
给用户用得方便~~~
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
猪三啊,你这个发开了那么久,现在才发上来啊,呵呵,
|
能力值:
( LV10,RANK:170 )
|
-
-
8 楼
工作忙呀~~~没有办法~~~ 在群里,我叫你贡献几个接口,你又说不会~~~
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
不错哦.继续呀.最好开源
|
能力值:
( LV12,RANK:410 )
|
-
-
10 楼
强,支持一下 ̄ ̄
|
能力值:
( LV9,RANK:170 )
|
-
-
11 楼
强大的好东西
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
哈哈,好东西,支持下~~~
|
能力值:
(RANK:1010 )
|
-
-
13 楼
坚持不懈,不断总结!
强烈支持!
|
能力值:
( LV10,RANK:170 )
|
-
-
14 楼
关于WinAPIEx项目通用算法库设计方案:整合C++ STL vector容器
该算法库的设计难点在于 如何维护和确定用户使用的每个算法容器。这个问题我思考几天,灵感来源于Windows操作系统的HANDLE表。
因此在维护每个用户使用的算法容器,也采用了HANDLE表的原理。用户每使用一个算法容器,就必须为这个算法容器建立一个HANDLE。
然后必须由一个全局的HANDLE表来维护多个算法容器。
下面实现步骤:
1> 建立一个全局HANDLE表
我采用了C++ STL 高效率的MAP容器
声明: std::map<ULONG, STRUCT_CONTAINER_OBJECT> g_ContainerObjectList ;
那么map容器的第一个参数就是算法容器的HANDLE, 第二个参数是算法容器类型
2> 声明一个算法容器类型识别结构
// 目前我们先简单的使用STL的动态数组vector
typedef struct _CONTAINER_OBJECT
{
std::vector<ULONGLONG> *pvector_UnsignPoint ; // 无符号动态数组
std::vector<LONGLONG> *pvector_signPoint ; // 有符号动态数组
}STRUCT_CONTAINER_OBJECT, *PSTRUCT_CONTAINER_OBJECT ;
3> 为每个算法容器创建一个HANDLE
说明: 为了保证唯一 和 简单性,采用了随机数方式
ULONG
Container_CreateGUI(VOID)
{
srand((unsigned)time(NULL)) ;
return rand() ;
}// End Container_CreateGUI()
4> 为了防止算法容器HANDLE的重复性,必须有个校验功能
BOOL
Container_CheckGUI(ULONG ulong_param_GUI)
{
// 在全局HANDLE表中查找是否有相同的HANDLE
if (g_ContainerObjectList.find(ulong_param_GUI) !=
g_ContainerObjectList.end())
{
return TRUE ; // 有重复的HANDLE
}
return FALSE ; // 无重复的HANDLE
}// End Container_CheckGUI()
5> 有了上面的基本模块,下面可以做一个导出接口了,供用户使用C++ STL的vector动态数组
ULONG
E_vector_Unsign_Create(VOID)
{
STRUCT_CONTAINER_OBJECT struct_VectorOBjcet ;
ULONG ulong_Object = 0 ;
SecureZeroMemory(&struct_VectorOBjcet, sizeof(STRUCT_CONTAINER_OBJECT)) ;
// 为用户建立C++ STL的vector动态数组
std::vector<ULONGLONG> *pvector_Object = new std::vector<ULONGLONG> ;
// 保存VECTOR容器指针
struct_VectorOBjcet.pvector_UnsignPoint = pvector_Object ;
// 校验容器HANDLE是否重复,如果重复则继续创建
do
{
ulong_Object = Container_CreateGUI() ;
} while(Container_CheckGUI(ulong_Object));
// 插入全局HANDLE表
if (g_ContainerObjectList.insert(std::make_pair(ulong_Object,
struct_VectorOBjcet)).second)
{
}
else
return -1 ; // 插入失败
return ulong_Object ; // 返回用户的算法容器HANDLE
}// End vector_Unsign_Create()
好,下面我们验证一下思路:
int main()
{
for (ULONG ulong_Count = 0 ;
ulong_Count < 20 ;
ulong_Count++)
{
E_vector_Unsign_Create() ; // 创建20个算法容器
}
// 打印20个算法容器的信息
std::map<ULONG, STRUCT_CONTAINER_OBJECT>::iterator map_Next ;
for (map_Next = g_ContainerObjectList.begin() ;
map_Next != g_ContainerObjectList.end() ;
map_Next++)
{
printf("vector Handle: %d vector Point: %p \n",
map_Next->first,
((STRUCT_CONTAINER_OBJECT)map_Next->second).pvector_UnsignPoint) ;
// 释放用户算法容器
delete ((STRUCT_CONTAINER_OBJECT)map_Next->second).pvector_UnsignPoint ;
}
}
运行效果:
vector Handle: 12081 vector Point: 00CB2970
vector Handle: 12084 vector Point: 00CB2A18
vector Handle: 12087 vector Point: 00CB2AC0
vector Handle: 12091 vector Point: 00CB2B68
vector Handle: 12094 vector Point: 00CB2C10
vector Handle: 12097 vector Point: 00CB2CB8
vector Handle: 12100 vector Point: 00CB2D60
vector Handle: 12104 vector Point: 00CB2E08
vector Handle: 12107 vector Point: 00CB2EB0
vector Handle: 12110 vector Point: 00CB2F58
vector Handle: 12114 vector Point: 00CB3000
vector Handle: 12117 vector Point: 00CB30A8
vector Handle: 12120 vector Point: 00CB3150
vector Handle: 12123 vector Point: 00CB31F8
vector Handle: 12127 vector Point: 00CB32A0
vector Handle: 12130 vector Point: 00CB3348
vector Handle: 12133 vector Point: 00CB33F0
vector Handle: 12136 vector Point: 00CB6C10
vector Handle: 12140 vector Point: 00CB6CB8
vector Handle: 12143 vector Point: 00CB6D60
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
不错,就我目前的水平,只能拿来主义,源码看不懂。好样的,支持,加油。
|
能力值:
( LV13,RANK:1050 )
|
-
-
16 楼
顶顶猪头三。
|
|
|