c++ builder 如何中使用动态数组?(100分)

  • 主题发起人 主题发起人 绿光
  • 开始时间 开始时间
绿

绿光

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在程序的主窗体中使用一个二维数组,它要求是全局变量,由于程序的执行过程中
不能确定数组的上届,如果预先定义恐怕会产生溢出(超出数组的上界)的情况,因此
我想使用动态定义数组,但不知该如何使用,请各位富翁指点迷津,谢谢!
 
char **a;
a = (char **)malloc(20);
for (int i = 0;i < 20;i ++)
{
a = (char *)malloc(20);
strcpy(a,"b.c_str()");
}
ShowMessage(a[19]);
for (int i = 0;i < 20;i ++)
{
delete a;
}
 
#include <sysdyn.hpp>
...
DynamicArray<int> DynamicIntArray;
== Delphi:
DynamicIntArray: array of Integer;
 
你可以使用STL里的Vector.
 
http://www.csdn.net/Expert/FAQ/FAQ_Index.asp?id=139
 
不行的, 要等C++ 变成下一代 C++++才行, :)
 
在程序的开始部分写上:
#include <vector>
using namespece std;
vector<int> 是整形,vector<double>是双精度,其余类推,
当然你要用的类型可以用typedef 定义,比如你要用double类型的
可以:
typedef vector<double> vectord;
然后,在你的代码段,可以定义vector类型了
比如:vectord MyVector;
帮助文件介绍了Vector类的各种成员函数,你可以自己查
 
上面讲的是使用vector 的办法,最基本的方法,还是用 new ,delete
这里有一段矩阵类的代码,你可以参考:
class matrix
{
double** val;
word Row,Col;
matrix(word row,word col,double** v)
{
Row=row;Col=col;
val = newdo
uble* [row];
word rowlen = col*sizeof(double);
for(int i=0;i<row;i++)
{
val = newdo
uble [col];
if(v)memcpy(val,v,rowlen);
}
};
~matrix()
{
for(int i=0;i<Row;i++)
delete [] val;
delete [] val;
};
chenxz介绍了char型数据使用malloc的办法,其余的类推
 
chenxz注意啦,你犯了严重的错误,用malloc();分配的内存只能用free;释放 而用new[];分配的只能用delete[];释放,所以你混用了
内存分配的函数。我建议你多看C++的基础书,对你有帮助。
另外,如果用C#或JAVA开发的话,溢出就会被虚拟机搞定。所以不必等到C+++++++,以上的问题也可以解决
 
给你个我做过的小程序你看看吧,需要一个form,一个buuton,一个listbox,一个Label
void __fastcall TForm1::Button1Click(TObject *Sender)
{
typedef DynamicArray< DynamicArray <Single> > LS;
//两维数组
LS Ls;
Ls.Length=10;
//第一维
for (int i=0;i<10 ;i++)
{
Ls.Length=5;
//第二维,可以任意设置
for (int j=0;j<5 ;j++)
{
Ls[j]=i*j+j+0.5;
Lb->Items->Add(FloatToStr(Ls[j]));//添加到listbox中,Lb为一个Listbox
}
Label1->Caption="Totle: "+IntToStr(Lb->Items->Count);
}
}
//---------------------------------------------------------------------------
 
建议使用STL里的vector,用了不会后悔的。
 
后退
顶部