本来参考了一个文章 可惜测试报错
http://hi.baidu.com/blackcode/blog/item/4ec300f4b06f9ae77709d748.html哪种方法 效率高 速度快 不报错 呵呵 我对 move 不是很熟悉 有采用动态链表方法的 最好
解决方案 »
- ^_^ 轻松一下,一个程序员买包子的笑话!
- 我想要通过判断屏幕分辨率是800*600还是1024*768,来确定显示窗体的大小和位置,请教用delphi怎么写?
- 显示PageControl项目中的问题,怎样避免。。。
- 两表组合问题.很急!
- 如何按一定格式解析字符串?如aaaa;bbb;ccc;按';'把aaaa,bbb,ccc解析出来
- 习惯了数据库,可惜现在这个项目不能用数据库,又没有什么可以替代的好办法?谢谢!
- 如何把Edit框中的竖线脱字符改成横线呢?我查到CreateCaret,但用起来没效果
- 请问如何动态创建ClientDataSet的字段
- 关于Frame里创建的线程问题
- delphi中webbrowser,如何给动网的文本域填内容??在线等
- 怎样设置DBLookupComboboxEh隐藏列呢?
- 一个按位与运算符的问题
不用 key 的数据结构中,常用的有链表、数组和堆等。链表删除的算法复杂度是 O(N),但是查找和插入的复杂度也是 O(N),而且也有额外的空间占用。List(Array)的插入和删除复杂度都是 O(N^2),但是查找的复杂度是常数。堆的应用一般是优先队列之类,不知道你的需求也不好说怎么样。
实际应用中 需要 实际删除 元素 否则 统计 length 不是实际长度
所以添加 删除标记 不可取 有哪位可以 给 出 可行的 代码 ?
TSubField = record //子字段
Name: string; //子字段名
Dsp: string; //子字段显示标题
Data: string; //子字段数据
end;
TSubFields = array of TSubField; TField = record //字段
Name: string; //字段名
ChineseName: string; //字段名中文名
Dsp: string; //字段显示标题
Data: string; //字段数据
Indicator1: string; //指示符1
Indicator2: string; //指示符2
SubFields: TSubFields; //子字段数组
SubFieldsCount: Integer; //子字段个数
end;
TFields = array of TField;......var FFields: TFields;现我想删除 FFields[5] 元素 如何操作? 删除 TSubFields[i] 如何写 涉及 结构体 嵌套了
procedure TList.Delete(Index: Integer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;不过我觉得你还不如把你的数组改用TList,把你的结构体声明成指针就行了
procedure TForm1.Button2Click(Sender: TObject);
var
I, arrIndex: Integer;
begin
arrIndex := StrToInt(Edit1.Text);
Move(myRecord[arrIndex + 1], myRecord[arrIndex], (High(myRecord) - arrIndex) * sizeof(TmyRecord));
SetLength(myRecord, Length(myRecord) - 1);end;
参考了 你给的代码 我测试调试成功 不再报错了 呵呵
害怕怕 僵哥出来说句话呀
也请楼上 讲讲理由 我的 结构体成员 有string 呀
是不是 先删除 子结构体 然后 再move 顶层 结构体
move 会异常 得不到 正确结果 安全考虑 我还是用 for 一遍 赋值 吧
,只把结构体内的指针复制过去了,而源对象的引用计数没有改变!因此可能会由于引用计数而导致对象的提前释放,而数组中那个指针还傻乎乎地指着刚刚已经被释放的堆内存,程序就挂了
顶