1
A
回答
1
一種方法是使用GetMem來分配足夠的內存。 GetMem似乎得到廣泛支持。
const
MAXMATRIXDATA: Word = 10000;
type
TMatrixDataType = Word;
TMatrixData = array[0..MAXMATRIXDATA] of TMatrixDataType;
PMatrixData = ^TMatrixData;
TMatrix = record
Rows, Cols: Word;
MatrixData: PMatrixData;
end;
PMatrix = ^TMatrix;
function CreateMatrix(Rows, Cols: Word): PMatrix;
var
Ret: PMatrix;
begin
New(Ret);
Ret^.Rows := Rows;
Ret^.Cols := Cols;
GetMem(Ret^.MatrixData,Rows*Cols*SizeOf(TMatrixDataType));
CreateMatrix := Ret;
end;
function GetMatrixData(Matrix: PMatrix; Row, Col: Word): TMatrixDataType;
begin
GetMatrixData := Matrix^.MatrixData^[(Row*Matrix^.Cols)+Col];
end;
procedure SetMatrixData(Matrix: PMatrix; Row, Col: Word; Val: TMatrixDataType);
begin
Matrix^.MatrixData^[(Row*Matrix^.Cols)+Col] := Val;
end;
1
任何現代的pascal變體(Delphi)都可以讓你創建動態的(運行時大小的)數組。
如果語言不支持,你可以照顧自己解決多維動態數組:
var
rows, cols, total, i, j : integer;
cell : datatype;
begin
rows := ...;
cols := ...;
total := rows * cols;
matrix := ...(total);
cell := matrix[i * cols + j]; // matrix[row=i,col=j]
end;
這種處理會比下面的鏈表快了很多。
相關問題
- 1. 如何在Python中實現鏈操作?
- 2. 如何在C#中實現malloc操作#
- 3. Pascal的三角Java實現
- 4. 記錄操作,如何實現更好
- 5. NHibernate如何實現批處理操作?
- 6. 如何實現的CRUD操作
- 7. 如何實現拖放操作
- 8. 如何實現JSP瀏覽器操作
- 9. 如何實現原子操作?
- 10. 如何實現連接操作
- 11. 如何實現字符串操作?
- 12. 如何使用Codeigniter實現CRUD操作?
- 13. Perl Catalyst操作如何實現?
- 14. 如何在asp.net中的GridView中實現CheckBox相關的操作?
- 15. 在NSTableView中實現拖放操作
- 16. 在php中實現集合論操作
- 17. 在Swift中實現響應者操作
- 18. 在Tensorflow中實現Theano操作
- 19. 如何在MS Access中實現SQL INTERSECT和MINUS操作
- 20. 如何在新的操作系統中實現計時?
- 21. 如何實現像「喜歡」在java中操作一個SQL?
- 22. 你如何在C#和MVVM中實現異步操作?
- 23. 如何在qt中實現幫助操作
- 24. 如何實現在Ace編輯器中的拖放操作?
- 25. 如何在Lambda架構中實現合併操作?
- 26. 如何在我的操作欄中實現搜索?
- 27. 如何在Scala中實現具有默認操作的地圖
- 28. 如何在Qt中實現鍵值文件操作
- 29. 如何在MahApps Metro Layout中實現拖放操作
- 30. 如何在Flex Grid控件中實現拖放操作?
MAXMATRIXDATA:Word = 10000;在FreePascal => MAXMATRIXDATA = 10000時不起作用 – 2009-05-01 12:54:19