小编use*_*191的帖子

Delphi Tdictionary继承

我尝试继承Tdictionary,并以某种方式丢失默认比较器.这就是我的本质:

type
  TinpVar = class
  end;
  TinputVars = class(Tdictionary<string,TinpVar>)
  end;
  TLVRvars = class(TinputVars)
    constructor create;
  end;

 constructor TLVRvars.create;
 begin
   inherited;
 end;

 var LVRvars : TLVRvars;

 begin
   LVRvars:=TLVRvars.create;
Run Code Online (Sandbox Code Playgroud)

通过这种结构,我在向LVRvars添加键/值对时获得AV.最终我发现可以通过将继承类的构造函数更改为可以防止这种情况

constructor TLVRvars.create;
begin
  inherited create;
end;
Run Code Online (Sandbox Code Playgroud)

我不明白为什么要这样做.虽然我的问题已经解决,但我仍然想知道.

delphi generics inheritance

16
推荐指数
1
解决办法
390
查看次数

不使用引用计数交换字符串

在 QuickSort 中,很多时间都花在了 swap 上temp:=var[i]; var[i]:=var[j]; var[j]:=temp。当 vars 是整数时,我为大型随机数组计时 140 毫秒。当变量为字符串时,时间为 750 毫秒。在我看来,大部分差异是由于需要更新所有三个分配中的引用计数造成的。但这有必要吗?毕竟,在这三个赋值之前和之后,var[i] 和 var[j] 的引用计数是相同的。下面的代码会破坏东西吗?(不是说它解决了速度问题,而是出于兴趣):

    // P : Pstring;
    move(values[i],P,sizeOf(Pstring));
    move(values[j],values[i],sizeOf(Pstring));
    move(P,values[i],sizeOf(Pstring));
Run Code Online (Sandbox Code Playgroud)

没有临时变量。只有指向字符串的两个指针被交换。如果这没问题,是否有 Delphi 函数来交换 2 个指针?

delphi string quicksort

6
推荐指数
1
解决办法
184
查看次数

Delphi:如何从类中引用数组

我使用数组并在类的上下文中测试了功能,例如:

Ttest   = class
 values : array of integer;
 procedure doStuff;
end;
Run Code Online (Sandbox Code Playgroud)

doStuff所有方法一样,这些方法都对值数组进行操作,而无需将数组作为参数传递。这适合我,而且速度很快。现在我想使用这个类来处理外部数组,比如Ttest.create(myValues)在构造函数中我可以复制myValues到内部,values但这会很浪费,而且,最后必须反转复制以将更新的值传回. 我的问题是如何扩展这个类,以便它可以有效地处理外部数组。在这样的伪代码中:

constructor create(var myValues : array of integer);
begin
  address of values := address of myValues;
  doSTuff;
end;
Run Code Online (Sandbox Code Playgroud)

arrays delphi class

2
推荐指数
1
解决办法
192
查看次数

标签 统计

delphi ×3

arrays ×1

class ×1

generics ×1

inheritance ×1

quicksort ×1

string ×1