博客访问: 819129
博文数量: 235
博客积分: 3997
博客等级: 少校
技术积分: 2229
注册时间:
Never save something for a special occasion. Every day in your life is a special occasion.
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
vb数据类型:善用VB集合数据类型&&&VB集合(Collection)数据类型,可以很方便实现插入删除,工作原理类似C链表。 并且在使用了Key后检索操作非常简单;但其编程上方便却带来了效率上急剧下降(尤其在大数据量时会让你无法忍受)。以下举两个例子来讨论下怎样把 集合 和 结构 结合使用,在方便和效率间达到平衡 。
----1.要求建立数据结构用来保存学生学号姓名和成绩并在需要时以成绩高低按顺序输出这些信息。这里我想提供两种解决思路方法&----第1种:完全用集合来保存数据&&
Typet MyType &&&&ID As Long &&&&Name As String &&&&Score As Integer End Type
类clsData&&Public ID As Long Public Name As String Public Score As Integer
并定义函数用来接受数据并插入到数据结构中 &Public Function InsertToCol(pData As tMyType) '其中m_ColData保存记录 Dim myClass As New clsData Set myClass=Nothing ' // For iLoopCtrl=1 To m_ColData.Count &&&&If m_ColData(iLoopCtrl).Score <=pData.Score Then Exit For Next myClass.ID=pData.ID myClass.Name=pData.Name myClass.Score=pData.Score If m_ColData.Count=0 Or iLoopCtrl =m_ColData.Count Then &&&&m_ColData.Add Item:=myClass Else &&&&m_ColIndex.Add Item:=myClass, before:=iLoopCtrl& ' // beforeEndIf EndFunction&&
这时对每个记录做处理如下 &Public Function OutProcess For iLoopCtrl=1 To m_ColData.Count &&&&CurrentID=m_ColData(iLoopCtrl).ID &&&&CurrentName=m_ColData(iLoopCtrl).Name &&&&CurrentScore=m_ColData(iLoopCtrl).Score &&&&'对当前记录做相应处理 Next EndFunction
&----第 2种: 集合和结构结合起来,结构保存数据,集合保存排序信息
定义变量 Public m_Array(99) As tMyType '根据需要也可以定义成动态&Public m_ColIndex As New Collection '用来保存索引信息
Public Function InsertToArray(pData As tMyType) If iCurIndex>99 Then Exit Function For iLoopCtrl=1 To m_ColIndex.Count If m_Array(m_ColIndex(iLoopCtrl)).Score <=pData.Score Then Exit For Next If m_ColIndex.Count=0 Or iLoopCtrl =m_ColIndex.Count Then m_ColIndex.Add iLoopCtrl-1 Else m_ColIndex.Add iLoopCtrl-1,before:=iLoopCtrl EndIf m_Array(iCurIndex).ID=pData.ID m_Array(iCurIndex).Name=pData.Name m_Array(iCurIndex).Score=pData.Score iCurIndex=iCurIndex1 End Function
这时对每个记录做处理如下 &Public Function OutProcess For iLoopCtrl=1 To m_ColData.Count I=m_ColData(iLoopCtrl) CurrentID=m_Array(I).ID CurrentName=m_Array(I).Name CurrentScore=m_Array(I).Score '对当前记录做相应处理 Next End Function
*性能分析 对于集合来讲 随着记录个数增长操作效率飞快下降,因为集合按下标查找记录时需要进行遍历。
集合+数组的方式 结合了 数组的随机访问 和 集合的高效增删 的优点。
----2.当记录有唯关键字并经常以这个关键字做查询时可以使用以下思路方法
定义用于保存数据结构和结构 &Type tMyType &&&&Item_1 As String '为关键字 &&&&Item_2 As String &&&&Item_3 As String End Type Public m_Array As tMyType Public m_ColIndex As New Collection '用于保存索引集合 &定义用于保存索引信息类clsIndex如下 &Public Item_Key As String Public ID_OfArray As Integer
插入记录pData的过程如下 &Public Function InsertData(pData As tMyType) Dim myClass As New clsIndex ID_OfArray=ID_OfArray1 ' // ?Get a free index of m_Array?m_Array(ID_OfArray).Item_1=pData.Item_1 m_Array(ID_OfArray).Item_2=pData.Item_2 m_Array(ID_OfArray).Item_3=pData.Item_3 myClass.Item_Key=pData.Item_1 myClass.ID_OfArray=ID_OfArray m_ColIndex.Add Item:=myClass,Key:=pData.Item_1 End Function
以给出关键字(mKey)&取得数据&Current_Item1=m_Array(myClass(mKey) .ID_OfArray).Item_1 Current_Item2=m_Array(myClass(mKey) .ID_OfArray).Item_2 Current_Item3=m_Array(myClass(mKey) .ID_OfArray).Item_3
阅读(1635) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。C++的数据类型转换关键字dynamic_cast_武林网
→ C++的数据类型转换关键字dynamic_cast
C++的数据类型转换关键字dynamic_cast
& & & & & & & & & & 在使用C++编程时,经常要用到不同数据类型之间的类型转换,可能大家对C语言的类型强制转换比较熟悉,就是在表达时前面加一个“(强制转换类型)”。在C++中仍然可以用C方式的对不同类之间数据类型转换,但是,C++提供了更好的数据类型转换方式,就是利用关键字“dynamic_cast”来完成对不同类之间数据类型之间的转换。dynamic_cast的使用格式是:dynamic_cast &T& (ptr)其中,T必须是一个类的的指针或引用,也可以是 void *,参数ptr必须是一个能得到一个指针或者引用的表达式。如果T是 void * ,那么 ptr 必须是一个指针,而不能是一个引用。如果转换成功,dynamic_cast &T& (ptr) 将把ptr转换成你想要转换的类型,如果不成功,返回0(NULL),如果转换到一个引用类型失败,将会触发一个“Bad_cast exception”异常。下面的代码是dynamic_cast的实例代码: &// HOW TO MAKE DYNAMIC CASTS &
& // 这个程序必须用 -RT 选项编译 &#include &iostreamstd::& & #include &typeinfo.h& &
& class Base1 & { &
& virtual void f(void) { &} & }; &
& class Base2 { }; & class Derived : public Base1, public Base2 { }; &
& int main(void) { &
& & &Derived d, * &
& & &Base1 *b1 = &d; &
& & & & &if ((pd = dynamic_cast&Derived *&(b1)) != 0) { & \t & std::cout && "The resulting pointer is of type " & \t\t&& typeid(pd).name() && std:: & \t } &
& & &else throw Bad_cast(); &
& & &Base2 *b2; &
& & &if ((b2 = dynamic_cast&Base2 *&(b1)) != 0) { & \t &cout && "The resulting pointer is of type " &
& \t & & & && typeid(b2).name() && & \t } &
& & &else throw Bad_cast(); &
& catch (Bad_cast) { &
& & &cout && "dynamic_cast failed" && &
& & &return 1; &
& catch (...) { &
& & &cout && "Exception handling error." && &
& & &return 1; &
& return 0; &
& } & 下面是一个实际应用的例子,在创建数据模块时,打开数据模块上面所有的数据集。其原理是:遍历数据模块的所有VCL控件,如果可以动态转换成数据集类型(TDataSet),则调用TDataSet的Open()方法打开它。//--------------------------------------------------------------------------- void __fastcall TDM::DataModuleCreate(TObject *Sender) {
& TDataSet *p;
& for(i=0;i&ComponentCi++)
& & &if(p=dynamic_cast&TDataSet *&(Components)) \t p-&Open(); } //---------------------------------------------------------------------------
本文引用网址:
在下列搜索引擎中搜索“C++的数据类型转换关键字dynamic_cast”的相关信息:
你可能还喜欢以下文章
?上一篇文章:
?下一篇文章:vb里变量名不能与关键字同名。。关键字是什么啊_vb吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:95,420贴子:
vb里变量名不能与关键字同名。。关键字是什么啊收藏
FoxTable 2014,更低难度,10倍效率,可编译,完美融合B/S和C/S优势,快速开发数据管理软件
应该就是程序本身就有了的,有意义的。
VB关键字总结1.编译命令关键字总结作用关键字定义编译常数。  #Const编译程序码中的选择区块。#If...Then...#Else2.变量与常数关键字总结作用关键字指定值。      Let声明变量或常数。  Const, Dim, Private, Public, New, Static声明模块为私有。Option Private Module判断       IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType引用当前对象。Me变量须明确声明。 Option Explicit设置缺省数据类型。  Deftype3.运算符关键字总结作用关键字算术。^, -, *, /, \, Mod, +, &比较。 =, &&, &, &, &=, &=, Like, Is逻辑运算。Not, And, Or, Xor, Eqv, Imp4.错误关键字总结作用关键字产生运行时错误。   Clear, Error, Raise取得错误信息。Error提供错误信息。 Err返回 Error 变体。CVErr运行时的错误处理。On Error, Resume类型确认。 IsError5.Collection 对象关键字总结作用关键字建立一个 Collection 对象。Collection添加对象到集合对象中。 Add从集合对象中删除对象。Remove引用集合对象中的项。 Item6.金融关键字总结作用关键字计算折旧率。 DDB, SLN, SYD计算未来值。 FV计算利率。   Rate计算本质利率。  IRR, MIRR计算期数。 NPer计算支付。 IPmt, Pmt, PPmt计算当前净值。 NPV, PV7.控制流关键字总结作用关键字分支。GoSub...Return, GoTo, On Error, On...GoSub, On...GoTo退出或暂停程序。DoEvents, End, Exit, Stop循环。Do...Loop For...Next, For Each...Next, While...Wend, With判断。Choose, If...Then...Else, Select Case, Switch使用过程。Call, Function, Property Get, Property Let, Property Set, Sub8.日期与时间关键字总结作用关键字设置当前日期或时间。Date ,Now, Time计算日期。DateAdd, DateDiff, DatePart返回日期。DateSerial, DateValue返回时间。  TimeSerial, TimeValue设置日期或时间。   Date, Time计时。  Timer9.目录和文件关键字总结作用关键字改变目录或文件夹。 ChDir改变磁盘。  ChDrive复制文件。FileCopy新建目录或文件夹。 MkDir删除目录或文件夹。RmDir重新命名文件、目录或文件夹。Name返回当前路径。 CurDir返回文件的日期、时间。 FileDateTime返回文件、目录及标签属性。GetAttr返回文件长度。   FileLen返回文件名或磁盘标签。   Dir设置有关文件属性的信息。SetAttr10.输入与输出关键字总结作用关键字访问或创建文件。Open关闭文件。     Close, Reset控制输出外观。Format, Print, Print #, Spc, Tab, Width #复制文件。                        FileCopy取得文件相关信息。EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek文件管理。Dir, Kill, Lock, Unlock, Name从文件读入。Get, Input, Input #, Line Input #返回文件长度。 FileLen设置或取得文件属性。FileAttr, GetAttr, SetAttr设置文件读写位置。Seek写入文件。 Print #, Put, Write #11.数据类型关键字总结作用关键字数据类型变换。   CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int设置数据类型。Boolean, Byte, Currency, Date, Double, Integer, Long, Object, Single, String, Variant (default)检查数据类型。IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject12.数学关键字总结作用关键字三角函数。Atn, Cos, Sin, Tan一般计算。Exp, Log, Sqr产生随机数。Randomize, Rnd取得绝对值。Abs取得表达式的正负号。Sgn数值变换。Fix, Int13.数组关键字总结作用关键字确认一个数组。IsArray建立一个数组。Array改变缺省最小值。Option Base声明及初始化数组。Dim, Private, Public, ReDim, Static判断数组下标极限值。LBound, UBound重新初始化一个数组。Erase, ReDim14.注册关键字总结作用关键字删除程序设置。DeleteSetting读入程序设置。GetSetting, GetAllSettings保存程序设置。SaveSetting15.变换关键字总结作用关键字ANSI 值变换为字符串。Chr大小写变换。 Format, LCase, UCase日期变换为数字串。DateSerial, DateValue数字进制变换。Hex, Oct数值变换为字符串。Format, Str数据类型变换。CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int日期变换。Day, Month, Weekday, Year时间变换。Hour, Minute, Second字符串变换为 ASCII 值。 Asc字符串变换为数值。Val时间变换为数字串。TimeSerial, TimeValue16.字符串处理关键字总结作用关键字比较两个字符串。StrComp变换字符串。StrConv大小写变换。Format, LCase, UCase建立重复字符的字符串。Space, String计算字符串长度。Len设置字符串格式。Format重排字符串。LSet, RSet处理字符串。InStr, Left, LTrim, Mid, Right, RTrim, Trim设置字符串比较规则。Option Compare运用 ASCII 与 ANSI 值。Asc, Chr17.其他关键字总结作用关键字处理搁置事件。DoEvents运行其他程序。AppActivate, Shell发送按键信息给其他应用程序。SendKeys发出警告声。 Beep系统。 Environ提供命令行字符串。 CommandMacintosh。                        MacID, MacScript自动。CreateObject, GetObject色彩。 QBColor, RGB
vb.net有个功能,但我不知道vb6有没有。给变量或过程名加中括号,在对象浏览器里显示不带中括号的名称。例:Public Sub [End]在对象浏览器里显示为End
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
得到的总是不好.得不到的永远是最美的.
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1552)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_086070',
blogTitle:'vb.net自定义数据类型',
blogAbstract:'用户自定义类型在vb.net中称为“structure”(结构),包含有一个或多个不同种类的数据类型,尽管结构中的数据可以单独被访问,但是这些数据仍被认为是一个集合。在vb 6.0中用户自定义类型的关键字是“Type”,之所以改成“structure”,或许是为了与C++的语法靠近吧。\r\n一个结构的定义以“structure”关键字开始,以“End Structure”关键字结束,结构中的元素可以是任意的数据类型的组合,包括其他结构。结构一旦定义出来后就可以被用作变量声明、参数传递以及函数的返回值等用途,下面是一个结构的语法:\r\n[Public|Private|Protected|]Structure structname
{Dim|Public|Private|Friend}member1 As datatype1',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:8,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'大家好.
得到的总是不好.得不到的永远是最美的.',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}