当前位置:文档之家› c#中动态数组的使用

c#中动态数组的使用

c#中动态数组的使用
c#中动态数组的使用

在向大家详细介绍C#动态数组之前,首先让大家了解下C#动态数组的方法及属性,然后全面介绍C#动态数组。

下面的例子向你演示C#动态数组的方法及属性,这样通过实例的演示介绍能够更加深刻的理解C#动态数组的各项基本概念和应用,希望对你有所帮助。

C#动态数组的详解实例:

1.ArrayList AL = new ArrayList();

2.AL.Add("Hello");

3.AL.Add(" World");

4.Console.WriteLine("给数组添加元素:");

5.foreach (Object obj in AL)

6.{ Console.Write(obj); }

7.Console.WriteLine();

8.Console.WriteLine("个数:" + AL.Count);

9.Console.WriteLine("容量: " + AL.Capacity);

10.AL.Insert(1, " c#");

11.//C#动态数组的详解实例

12.Console.Write("在索引值为1的地方插入 ");

13.foreach (Object obj in AL)

14.{Console.Write(obj); }

15.Console.WriteLine();

16.Console.WriteLine("个数:" + AL.Count);

17.Console.WriteLine("容量: "+AL.Capacity);

18.AL.Add("。");//给集合添加“。”,查看集合的容量

19.Console.WriteLine("容量。: " + AL.Capacity);

20.AL.Add("---");//给集合添加“---”,查看当集合的容量不够时,倍数变化

21.Console.WriteLine("容量---: " + AL.Capacity);

22.Console.WriteLine("3号索引的:"+AL[3]);

23.//用索引方式获取集合元素值

24.//C#动态数组的详解实例

25.Console.WriteLine("数组中是否包含?:"+AL.Contains ("?"));

26.//利用contains方法,查找集合中是否包含“?”

27.Console.WriteLine("经过之前操作后的数组元素:");

28.foreach (Object obj in AL)

29.{ Console.Write(obj); }

30.Console.WriteLine();

31.Console.WriteLine("个数:" + AL.Count);

32.Console.WriteLine("容量: " + AL.Capacity);

33.//C#动态数组的详解实

34.AL.Remove("。");//移除集合中的“。”元素

35.AL.Remove("?");

36.//移除集合中的“?”,但是因为没有“?”,

37.//所以此行代码不会对集合进行操作。

38.Console.WriteLine("没有?个数只减少1个容量不变");

39.foreach (Object obj in AL)

40.{ Console.Write(obj); }

41.Console.WriteLine();

42.Console.WriteLine("个数:" + AL.Count);

43.Console.WriteLine("容量: " + AL.Capacity)

44.AL.RemoveAt(3);//移除3号索引的元素

45.Console.WriteLine("移除3号索引位的元素:");

46.foreach (Object obj in AL)

47.{ Console.Write(obj); }

48.Console.WriteLine();

49.Console.WriteLine("个数:" + AL.Count);

50.Console.WriteLine("容量: " + AL.Capacity);

51.AL.TrimToSize();//缩减容量

52.Console.WriteLine("实际容量: " + AL.Capacity);

53.AL.Clear();

54.Console.WriteLine("清除全部元素后:")

55.Console.WriteLine("个数:" + AL.Count);

56.Console.WriteLine("容量: " + AL.Capacity);

57.AL.TrimToSize();//缩减容量

58.Console.WriteLine(“再次缩减实际容量: " + AL.Capacity);

通过以上的例子你们应该已经理解集合的方法,我们再来总结一下集合ArrayList相比数组有什么好处?主要是它可以根据使用大小按需动态增加,不用受事先设置大小的控制,还有就是可以随意的添加、插入或移除某一范围元素,比数组要方便。但是它也有不足,ArrayList 不管对象是什么类型都会添加到集合j中,在编译时都是没有问题的,但是在遍历的时候,为防止集合中元素的类型不一致,所以最好使用object类型来接收遍历j的元素,如foreach(object i in j)这样就能减少错误。

C#动态数组的详解实例就向你介绍到这里,希望对你了解和学习C#动态数组有所帮助。

MFC中如何动态创建控件并响应其消息

原理: 利用窗体上的消息都会经OnCmdMsg进行路由处理的原理,在这里截获自己动态生成的那些控件,然后通过自定义消息发送出去(带上控件id),经自己的消息处理函数处理即可。 1、定义起始控件ID号,和自定义消息 UINT Start_CtlID = 1980; #define DynamicBtnMessage WM_USER+200 后面动态创建的控件id号会基于Start_CtlID自增; 2、在OnInitDialog中动态创建控件 窗体类中定义:CArray btnArray 以保存动态创建的按钮 int btnw=120;int btnh = 50;//创建*3个button,顺序排列 for (int i=0;i<5;i++) { for (int j=0;j<5;j++) { CString str; str.Format(_T("Cam%d"),Start_CtlID-1980); r.left =100 + (j*btnw); r.top =250 + (i*btnh); r.bottom = r.top + btnh; r.right =r.left + btnw; CButton *btn = CreateButton(Start_CtlID,str,r, BS_FLAT); btn->ShowWindow(SW_SHOW); btnArray.Add(btn); } }

3 在OnCmdMsg中处理控件点击消息 BOOL CFormDlg::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // 判断传进来的控件id位于动态创建button的id之间,并且命令nCode是控件命令(比如点击事件消息),注:其它系统事件也会走到这个函数里进行分发的。 if (nID>=1980 && nID<=Start_CtlID-1 && CN_COMMAND==nCode) { //发送自定义消息,并附上控件ID PostMessage(DynamicBtnMessage,nID,NULL); } return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); } 4、在自定义消息处理函数中处理点击事件 在BEGIN_MESSAGEMAP和END_MESSAGE_MAP之间加入以下消息映射: ON_MESSAGE(DynamicBtnMessage, &CpngFormDlg::OnDynamicBtnMessage) 在头文件中定义消息响应函数: afx_msg LRESULT OnDynamicBtnMessage(WPARAM wParam, LPARAM lParam); LRESULT CpngFormDlg::OnDynamicBtnMessage(WPARAM wParam, LPARAM lParam) { g_ClickBtnID = (UINT)wParam-1980; if (g_ClickBtnID>=0 && g_ClickBtnID<=100) { CString str; str.Format(_T("button %d is clicked!"),g_ClickBtnID);//获取到点击的是谁 AfxMessageBox(str); } return TRUE; }

如何在VC中创建动态数组

如何在VC中创建动态数组 怎样给多维数组动态分配内存 //Allocate: int **p = new int* [m]; for(int i = 0 ; i < m ; i++) p[i] = new int[n]; //Use: for(int i = 0 ; i < m; i++) for(int j = 0 ; j < n ; j++) p[i][j] = i * j; //Free: for(int i = 0 ; i < m ; i++) delete[] p[i]; delete[] p; 1. 演示形为int[2][3]的二维动态数组 /////////////////////////////////////////////////////////////////// int n1, n2; const int DIM1 = 2; const int DIM2 = 3; // 构造数组 int **ppi = new int*[DIM1]; for(n1 = 0; n1 < DIM1; n1++) { ppi[n1] = new int[DIM2]; } // 填充数据 for(n1 = 0; n1 < DIM1; n1++) { for(n2 = 0; n2 < DIM2; n2++) { ppi[n1][n2] = n1 * 10 + n2; } } // 输出 for(n1 = 0; n1 < DIM1; n1++) { for(n2 = 0; n2 < DIM2; n2++) {

afxDump << "ppi[" << n1 << "][" << n2 << "] = " << ppi[n1][n2] << "\n"; } } // 释放数组 for(n1 = 0; n1 < DIM1; n1++) { delete [] ppi[n1]; } delete [] ppi; 2. 三维动态数组(int[2][3][4]) /////////////////////////////////////////////////////////////////// int n1, n2, n3; const int DIM1 = 2; const int DIM2 = 3; const int DIM3 = 4; // 构造数组 int ***ppi = new int**[DIM1]; for(n1 = 0; n1 < DIM1; n1++) { ppi[n1] = new int*[DIM2]; for(n2 = 0; n2 < DIM2; n2++) { ppi[n1][n2] = new int[DIM3]; } } // 填充数据 for(n1 = 0; n1 < DIM1; n1++) { for(n2 = 0; n2 < DIM2; n2++) { for(n3 = 0; n3 < DIM3; n3++) { ppi[n1][n2][n3] = n1 * 100 + n2 * 10 + n3; } } } // 输出 for(n1 = 0; n1 < DIM1; n1++) { for(n2 = 0; n2 < DIM2; n2++) { for(n3 = 0; n3 < DIM3; n3++)

最新C++二维动态数组的申请与_释放汇总

C++二维动态数组的申请与_释放

一维数组是指针,可将二维数组看作是指针的指针:每一行是一个一维数组,而列是指向行的指针。在动态创建时,先分配指向行的指针空间,再循环维每一行申请空间。 #include using namespace std; int main() { //[3]4] //三行四列的二维数组 int x,y; int i,n,k; x=3; y=4; int **p; p = new int*[x]; //行 //申请行的空间 //每行的列申请空间 for(i=0; i

//赋值, k=0; for(i=0;i

delete [] p[i]; } delete [] p; return 0; 今天归纳总结了一下,希望以后的朋友可以少走些弯路:) 一:关于指针和堆的内存分配 先来介绍一下指针:指针一种类型,理论上来说它包含其他变量的地址,因此有的书上也叫它:地址变量。既然指针是一个类型,是类型就有大小,在达内的服务器上或者普通的PC机上,都是4个字节大小,里边只是存储了一个变量的地址而已。不管什么类型的指针,char * ,int * ,int (*) ,string * ,float * ,都是说明了本指针所指向的地址空间是什么类型而已,了解了这个基本上所有的问题都好象都变的合理了。 在C++中,申请和释放堆中分配的存贮空间,分别使用new和delete的两个运算符来完成: 指针类型指针变量名=new 指针类型 (初始化); delete 指针名; 例如:1、 int *p=new int(0); 它与下列代码序列大体等价: 2、int tmp=0, *p=&tmp; 区别:p所指向的变量是由库操作符new()分配的,位于内存的堆区中,并且该对象未命名。 下面是关于new 操作的说明:部分引自<>

c#中动态数组的使用

在向大家详细介绍C#动态数组之前,首先让大家了解下C#动态数组的方法及属性,然后全面介绍C#动态数组。 下面的例子向你演示C#动态数组的方法及属性,这样通过实例的演示介绍能够更加深刻的理解C#动态数组的各项基本概念和应用,希望对你有所帮助。 C#动态数组的详解实例: 1.ArrayList AL = new ArrayList(); 2.AL.Add("Hello"); 3.AL.Add(" World"); 4.Console.WriteLine("给数组添加元素:"); 5.foreach (Object obj in AL) 6.{ Console.Write(obj); } 7.Console.WriteLine(); 8.Console.WriteLine("个数:" + AL.Count); 9.Console.WriteLine("容量: " + AL.Capacity); 10.AL.Insert(1, " c#"); 11.//C#动态数组的详解实例 12.Console.Write("在索引值为1的地方插入 "); 13.foreach (Object obj in AL) 14.{Console.Write(obj); } 15.Console.WriteLine(); 16.Console.WriteLine("个数:" + AL.Count); 17.Console.WriteLine("容量: "+AL.Capacity); 18.AL.Add("。");//给集合添加“。”,查看集合的容量 19.Console.WriteLine("容量。: " + AL.Capacity); 20.AL.Add("---");//给集合添加“---”,查看当集合的容量不够时,倍数变化 21.Console.WriteLine("容量---: " + AL.Capacity); 22.Console.WriteLine("3号索引的:"+AL[3]); 23.//用索引方式获取集合元素值 24.//C#动态数组的详解实例 25.Console.WriteLine("数组中是否包含?:"+AL.Contains ("?")); 26.//利用contains方法,查找集合中是否包含“?” 27.Console.WriteLine("经过之前操作后的数组元素:"); 28.foreach (Object obj in AL) 29.{ Console.Write(obj); } 30.Console.WriteLine(); 31.Console.WriteLine("个数:" + AL.Count);

c语言数组的动态分配

下面代码添加到头文件里面 #include #include struct data { int*p;//指针保存数组起始点 int length;//保存数组长度 int reallength;//实际分配内存长度 int state;//0代表无序,1代表有序从小到大,2代表有序从大到小 }; struct find { int**pp; int n; }; void init(struct data*pdata);//初始化 void reinit(struct data*pdata);//重新初始化 void addobject(struct data*pdata,int num);//增加一个元素 void addobjects(struct data*pdata,int*pnum,int n);//增加一个数组void printf1(struct data*pdata);//打印一个出来 void sort(struct data*pdata,int obj);//实现排序obj=0从小到大,否则从大到小 int*finddata(struct data*pdata,int num);//找到并返回第一次找到的地址void change(struct data*pdata,int oldnum,int newnum);//修改一个数据void insert(struct data*pdata,int num,int insertnum,int headback);//插入一个数据,0代表前插,1代表后插 void deleteone(struct data*pdata,int num);//删除第一个找到的数据 void deleteall(struct data*pdata,int num);//删除找到的全部数据 struct find findalldata(struct data*pdata,int num);//返回一片内存,包含所有找到的元素

C#.NET中动态添加与删除控件

C#.NET中动态添加与删除控件 数组为共享公用功能的一组控件一起工作提供了便捷的途径。例如,一组控件可能用于显示相关的数据,或者在被点击时提供相关的行为。C#本身并不支持控件数组的建立,但是你可以通过编程复制控件数组的所有功能。本文介绍复制控件数组功能的简单组件的建立。 控件数组的主要用处有: 1,使用相同的名称与索引访问一组控件,允许用编号检索和设置数据项并且在整个数组中重复。这个功能可以使用下面的代码实现。 伪代码 myControl[myIndex].MyProperty = myValue; myControl[myIndex + 1].MyMethod 2,多个对象使用同一个事件处理程序(event handler)处理事件,在这些事件中检索和使用索引,代码如下: 伪代码 private void myControl_Click(System.Object sender, System.EventArgs e) { Messagebox.Show("You have clicked MyControl number " + myControl.Index); } 3,在运行时动态添加或者删除控件,代码如下: 伪代码 for (int i = 1; i < 6; i++) { //插入代码来建立控件并给属性赋值 } C#允许你复制与控件数组相关的一些功能。例如,你能使用委托把多个对象的事件绑定到一个事件处理程序。但是,如果把这些功能合并到一个动态的、容易管理的组件中更加简便。本文将建立有下面特性的组件: ·建立索引和排序控件的集合。将使用按钮集合来演示。 ·一个事件处理程序来处理衍生的按钮的点击事件。 ·使用索引引用控件和成员的代码。 ·给窗体动态添加和删除控件的代码。 建立项目 在本节中将建立并命名一个项目,并给该项目添加一个类。该类将封装实现控件数组的代码。 1、选择File-> New-> Project菜单打开New Project对话框。

C语言中动态数组的实现

C语言中动态数组的实现 (2009-05-10 10:19:30) 转载 分类:C语言学习 标签: c中动态数组 教育 近来编写几个程序,很多都用到了数组。但是对于数组的大小却是没有固定的,也就是说可以更改数组大小,其大小是可以变化的。并不像初学时的那样,告诉你一个范围,你就必须取最大值以满足要求。那样可能就会浪费很多不必要的内存单元!那么到底应该怎样定义一个动态数组列? 在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。例如: int n;scanf("%d",&n);int a[n]; 用变量表示长度,想对数组的大小作动态说明,这是错误的。但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。其它文献中所提到的"动态数组",指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小.其本质是一个指向数组的指针变量.常用的内存管理函数有以下三个: 1.分配内存空间函数malloc 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。“类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。 2.分配内存空间函数 calloc calloc 也用于分配内存空间。调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu 类型,并把其首地址赋予指针变量ps。

VB中动态创建控件

VB中动态创建控件 VB相关技术:https://www.doczj.com/doc/1d6736965.html,/s/blog_5ccce2820100lof8.html 创建数据驱动窗体 所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。要做到这一点就得利用VB动态添加控件的功能。 动态创建控件 无论你想要创建何种类型的数据驱动窗体,你必须知道如何在运行时动态地创建控件。你可以通过控件数组做到这一点,但VB6的Controls集合所提供的Add 方法,功能更强大,灵活性更高。使用该方法,你不需要在设计时将控件的实例放在窗体上。实际上,用Add方法你甚至可以创建程序在编译时根本不存在的控件。这种方法的用法也很简单: ' 声明一个窗体级的变量 Dim WithEvents txtTotal As TextBox Sub CreateTextbox() ' 创建新的Textbox控件 Set txtTotal = Controls.Add("VB.TextBox", "txtTotal") ' 将控件移动到你所需要的地方 txtTotal.Move 1000, 800, 1200, 300 ' 创建时,所有的控件都是不可见的 txtTotal.Visible = True End Sub 请注意Add方法的第二个参数:分配给控件的名称。从代码可读性出发,这个名称一般都与变量名相同。你可以用这个名称从Controls集合中获取相应的控件或移除该控件。例如: Controls.Remove "txtTotal" 在变量声明时加上WithEvents关键字,即使在设计时窗体不存在该控件,你也可以为该控件的事件编写代码。

Delphi之动态数组使用总结

Delphi之动态数组使用总结 传统的Pascal 语言其数组大小是预先确定的,当你用数组结构声明数据类型时,你必须指定数组元素的个数。专业程序员也许知道些许动态数组的实现技术,一般是采用指针,用手工分配并释放所需的内存。 Delphi 4中增加了非常简单的动态数组实现方法,实现过程效仿我前面讲过的动态长字符串。与长字符串一样,动态数组的内存动态分配并且引用记数,不过动态数组不支持copy-on-write 技术。这不是个大问题,因为你可以把变量值设置为nil释放数组内存。 这样你就可以声明一个不指定元素个数的数组,并用SetLength 过程给数组分配一个特定大小的内存,SetLength 过程还可以改变数组大小而不影响其内容,除此外还有一些字符串过程也可用于数组,如Copy 函数。 以下摘录的代码突出了一点,这就是:定义数组后必须先为它分配内存,然后才能开始使用: procedure TForm1.Button1Click(Sender: TObject);var Array1: array of Integer;begin Array1 [1] := 100; // error SetLength (Array1, 100); Array1 [99] := 100; // OK ...end; 如果你只定义一个数组元素个数,那么索引总是从0开始。Pascal 中的普通数组既能用不为零的下标,也能用非整数的下标,但动态数组均不支持这两种下标。象普通数组一样,你可以通过Length、High和Low 函数了解到动态数组的状况,不过对于动态数组,Low 函数返回值总是0,High函数返回数组大小减1,这意味着空的动态数组其函数High返回值是-1,这是一个很怪的值,因为它比Low的返回值还小。 图8.1:例DynArr 窗体 以上作了简短的介绍,现在举个简例,例名DynArr ,见图8.1。例子实在是很简单,其实动态数组没有什么特别复杂地方。我想通过该例说明几个程序员可能犯的错误。程序中声明了两个全程数组并在OnCreate 事件中初始化了第一个数组: var Array1, Array2: array of Integer;procedure TForm1.FormCreate(Sender: TObject);begin // allocate SetLength (Array1, 100);end; 这样就把数组所有值设置为0。完成这段代码你马上就能读写数组元素的值,而不用害怕内存出错,当然条件是你没有试图访问超过数组上界的元素。为了更好地初始化,程序中添加了一个按钮,执行数组元素赋值操作:

VB动态添加控件的简单方法

VB动态添加控件并对其进行拖放操作改变位置 用Controls.Add添加控件 Dim WithEvents mypic As PictureBox Private Sub Command1_Click() Set mypic = Controls.Add("VB.PictureBox", "mypic") mypic.Left = 50 mypic.Top = 50 mypic.Visible = True End Sub 至于拖放操作,在程序中设置好mypic控件的有关属性后,处理mypic的有关事件即可 注意: 如果是控件数组的话,建议采用:load 控件数组名(索引) 的方法添加控件 '可先手工画一个控件,Visable设置为False,Index设置为0 '若需要多个就用load object(index)来加载,并把它们的visable设置为true;不需要多个就真接把原有的那个的visable设成显示就行了。 Private Declare Function ReleaseCapture Lib "user32" () As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Private Sub Command1_MouseDown(Index As Integer, Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = 1 Then ReleaseCapture '移动控件 SendMessage Command1(Index).hwnd, &HA1, 2, 0& End If End Sub

C语言动态数组

动态数组是指在声明时没有确定数组大小的数组,即忽略圆括号中的下标;当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小。使用动态数组的优点是可以根据用户需要,有效利用存储空间。 动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放内存。(欲详细了解堆请见堆栈) 为什么要使用动态数组? 在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用静态数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数结合指针可以按需要动态地分配内存空间,来构建动态数组,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。 动态数组与静态数组的对比 对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点! 对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。 如何构建动态数组 遵循原则 申请的时候从外层往里层,逐层申请; 释放的时候从里层往外层,逐层释放。 构建所需指针 对于构建一维动态数组,需要一维指针;对于二维,则需要一维,二维指针;三维需要一,二,三维指针; 依此类推。 构建所需函数 函数原型返回 功能说明 void *malloc(unsigned int size); 成功:返回所开辟空间首地址失败:返回空指针向系统申请size字节的堆空间 void *calloc(unsigned int num, unsigned int size);成功:返回所开辟空间首地址失败:返回空指针按类型申请num个size字节的堆空间 void free(void *p); 无返回值 释放p指向的堆空间 void *realloc(void *p,unsigned int size); 成功:返回新开辟空间首地址失败:返回空指针将p指向的堆空间变为size 说明: (1)规定为void *类型,这并不是说该函数调用后无返回值,而是返回一个结点的地址,该地址的类型为void(无类型或类型不确定),即一段存储区的首址,其具体类型无法确定,只有使用时根据各个域值数据再确定。可以用强制转换的方法将其转换为别的类型。例

vb动态添加删除控件汇总

VB 动态添加删除控件汇总 1. 概述在使用Visual Basic 进行程序设计的过程中,如果能在运行时刻动态地创建和删除控件,可以极大地丰富界面的处理和变化。本人在设计网络监控系统时,需要在原理图与实物示意图间切换。切换的过程采用本文介绍控件的动态创建和删除来实现,有效地节省了系统资源,同时也有利于简化界面的维护。下面将就Visual Basic 6.0 中的控件在运行时刻的创建和删除的两种方法——控件数组 和控件集合作详细的阐述。2. 基于控件数组的动态控件的创建与删除vb 中的控件数组实际上也是一种数组,其中的每个控件具有相同的Name 属性,但具有不同的Index 属性,在这里Name 属性类似于数组的名字,而Index 属性类似于数组的下标同时,控件数组也支持普通VBA 数组的LBound 、UBound 和Count 方法,控件数组中的控件可以共享一个事件过程,便于代码的编写和集中处理,这正是使用控件数组的最大的理由。但是控件数组与普通的数组并非完全一样,它不需要定义大小,只有这样我们才可以动态的扩展[kuo zhan]它。下面给出利用Load 命令动态添加控件和Unload 命令动态删除控件的一般方法:(1) 首先在窗体上放置一个TextBox ,其Name 属性设置为Text1 ,Index 属性设置为0 ,这样我们就创建了一个

TextBox 控件数组,其中有一个成员。(2)在窗体上放置一个命令按钮Command1 ,在其Click 事件中添加如下的代码:Load Text1(1)Text1(1).left=0Text1(1).visible=true(3) 在窗体上放置一个命令按钮Command2 ,在其Click 事件中添加如下的代码:Unload Text1(1)(4)运行。单击命令按钮Command1 ,窗体上会出现一个新的文本框;单击命令按钮Command2 ,窗体上刚出现的新的文本框就被删除。需要注意的是:Load 命令创建的控件Text1(1) 与设计时已经放在窗体上的控件Text1(0) 有完全相同的属性,也包括大小和位置等属性,例外的就是Index 属性不一样,Visible 属性默认为False, 所以必须在Load 方法执行之后,执行调整控件位置的语句[yu ju],并把其Visible 属性设置为True ,以便在窗体上可见。Unload 命令只能删除动态加载的控件,若删除设计时创建的控件会产生错误[cuo wu]。另外,利用上面提到的数组的一些方法,可以有效的简化代码的编写。以下的代码可以删除所有动态创建的Text1 控件数组中的控件: Do While Text1.Count>1Unload Text1(Text1.Ubound)Loop需要说明[shuo ming]的是,菜单数组是控件数组的一种特殊的形式,只是它是在菜单编辑器[bian ji qi]中设置相应的Name 和Index 属性,而且要求一个菜单控件数组中的菜单项必须是

动态数组vector用法

Vector用法介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了。 Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码: #include vector属于std命名域的,因此需要通过命名限定,如下完成你的代码: using std::vector; vector vInts; 或者连在一起,使用全名: std::vector vInts; 建议使用全局的命名域方式: using namespace std; 在后面的操作中全局的命名域方式会造成一些问题。vector容器提供了很多接口,在下面的表中列出vector的成员函数和操作。 Vector的函数 c.assign(beg,end) 将[beg; end)区间中的数据赋值给c。 c.assign(n,elem) 将n个elem的拷贝赋值给c。 c.at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。

c.back() 传回最后一个数据,不检查这个数据是否存在。 c.begin() 传回迭代器中的一个数据。 c.capacity() 返回容器中数据个数。 c.clear() 移除容器中所有数据。 c.empty() 判断容器是否为空。 c.end() 指向迭代器中的最后一个数据地址。 c.erase(pos) 删除pos位置的数据,传回下一个数据的位置。 c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。 c.front() 传回地一个数据。 get_allocator 使用构造函数返回一个拷贝。 c.insert(pos,elem) 在pos位置插入一个elem拷贝,传回新数据位置。 c.insert(pos,n,elem) 在pos位置插入n个elem数据。无返回值。 c.insert(pos,beg,end) 在pos位置插入在[beg,end)区间的数据。无返回值。

android中利用linearlayout动态添加控件 - androider的专栏 -

Android中利用LinearLayout动态添加控件- Androider的 专栏-... 在androidUI布局中,一般都是利用xml来布局控件,这是比较方便和直观的,但是有时却需要动态生成,下面就举2个简单例子来说明怎么动态添加控件: 1.动态添加2个垂直排列的Button view plaincopy to clipboardprint? 01. @Override 02. public void onCreate(Bundle savedInstanceState) { 03. super.onCreate(savedInstanceState); 04. //setContentView(https://www.doczj.com/doc/1d6736965.html,yout.main); 05. final LinearLayout layout2=new LinearLayout(this); 06. layout2.setOrientation(LinearLayout.VERTICAL); 07. Button btn1=new Button(this); 08. setContentView(layout2); 09. Button btn2=new Button(this); 10. btn1.setText("Button1"); 11. btn2.setText("Button2"); 12. layout2.addView(btn1);

13. layout2.addView(btn2); 14. 15. 16. setContentView(layout2); 17.} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(https://www.doczj.com/doc/1d6736965.html,yout.main); final LinearLayout layout2=new LinearLayout(this); layout2.setOrientation(LinearLayout.VERTICAL); Button btn1=new Button(this); setContentView(layout2); Button btn2=new Button(this); btn1.setText("Button1"); btn2.setText("Button2"); layout2.addView(btn1); layout2.addView(btn2); setContentView(layout2); }

动态数组的创建

摘要的重要性是不言而喻的,每次发文章我都很纠结如何写出一个有特色的摘要来,能够以最为简短的文字向读者描述出我所要表达的东西。但是常常出现的问题是,摘要写得太简短了,读者看了不清楚文章究竟要讲啥;摘要写得稍微长点的话自然能够描述清楚所要表达的东西,但是却也出现了另外一个问题,就是读者看到大段的文字描述,觉得枯燥无味,直接二话不说给文章判了个“死刑”,导致这种情况下愿意真正的花时间看完摘要的读者屈指可数,更不用说文章的正文部分了,所以时长感慨写文章最头疼的莫过于摘要了。 很多人在编写C语言代码的时候很少使用动态数组,不管什么情况下通通使用静态数组的 方法来解决,在当初学习C语言的时候我就是一个典型的例子,但是现在发现这是一个相 当不好的习惯,甚至可能导致编写的程序出现一些致命的错误。尤其对于搞嵌入式的人来所,嵌入式系统的内存是宝贵的,内存是否高效率的使用往往意味着嵌入式设备是否高质量和高性能,所以高效的使用内存对我们来说是很重要的。那么我们在自己编写C语言代码的时 候就应该学会使用动态数组,这也就是我这篇博客要给大家讲的,我尽我所能的用一些简单的代码来讲解动态数组,希望我所讲的对你有所帮助。 那么我们首先来看看什么是动态数组,动态数组是相对于静态数组而言,从“动”字我们也可以看出它的灵活性,静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆动态分配的。是通过执行代码而为其分配存储空间。当程序执行到我们编写的分配语句时,才为其分配。对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。所以相对于静态数组的来说我们对于使用动态数组有很大的自由度。 在创建动态数组的过程中我们要遵循一个原则,那就是在创建的时候从外层往里层,逐层创建;而释放的时候从里层往外层,逐层释放。这个话你读了可能理解并不深刻,不过不要急,接下来我们看看两段代码。 一维动态数组的创建: #include #include int main() { int n1,i; int *array; printf("请输入所要创建的一维动态数组的长度:");

vb动态添加控件

搞了快一个下午的这个东东, 其实是在搞一个在VB6.0中动态添加控件和时间的一个实现, 没用过VB6.0, IDE也么有VS好用... 好多东东在探索 结果就报了个这个错误.... run-time error '91' object variable or with block variable not set 查了好久, 原来是使用变量的时候, 没有去new它, 因为别人给的sample中, Dim的时候, 有new, 单身我拿过来用的时候, dim后面的new在build的时候不通过, 我就拿掉了, 结果运行的时候一直出这个问题.. 动态添加控件和时间的, 参考如下(等哪天我有空了,再来写) 创建数据驱动窗体 所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。要做到这一点就得利用VB动态添加控件的功能。 动态创建控件 无论你想要创建何种类型的数据驱动窗体,你必须知道如何在运行时动态地创建控件。你可以通过控件数组做到这一点,但VB6的Controls集合所提供的Add方法,功能更强大,灵活性更高。使用该方法,你不需要在设计时将控件的实例放在窗体上。实际上,用Add方法你甚至可以创建程序在编译时根本不存在的控件。这种方法的用法也很简单: ' 声明一个窗体级的变量 Dim WithEvents txtTotal As TextBox Sub CreateTextbox() ' 创建新的Textbox控件

(一)C++动态二维数组的申请、赋值、使用、释放以及作参数示例

/***************************/ /* DYNAMIC ARRAY EXEMPLE */ /* 唐国峰2011年月日 */ /***************************/ //按照动态二维数组的申请、赋初值、使用、释放空间五个部分给出代码,以示参考。//同时,给出了动态二维数组用作形参和实参的实例,方便大家查询。 #include using namespace std; //动态二维数组作形参 void display(int ** &p,int row,int col) { int i,j; for(i = 0;i <= row-1;i++) { for(j = 0; j <= col-1;j++) { cout << p[i][j]+i+j << "\t"; } cout << endl; } } //主函数 void main() { //-------格式化输出模板信息内容------开始------ cout << "程序输出结果如下所示:" << endl << endl; cout << "/***************************/" << endl; cout << "/* DYNAMIC ARRAY EXEMPLE */" << endl; cout << "/* 唐国峰2011年月日 */" << endl; cout << "/***************************/" << endl << endl; //-------格式化输出模板信息内容------结束------ int **p; //这是指向指针的指针 int row,col; //此动态二维数组为“row”行、“col”列 int i,j; //循环用变量 //动态二维数组p的申请 cout << "请输入行数和列数:" << endl << endl; cin >> row >> col; cout << endl; p = new int *[row]; for(int i = 0;i <= row-1;i++) { p[i]=new int[col]; } //为动态二维数组p的元素赋初值 for(i = 0;i <= row-1;i++) { for(j = 0; j <= col-1;j++)

相关主题
文本预览
相关文档 最新文档