3

我正在用 Pascal 编程,我试图找出标准库中是否有任何已经创建的函数/过程或类似的函数可以让我知道一个集合有多少元素?

我知道如何通过使用 for 循环和计数器在找到一个元素时增加 +1 来做到这一点(类似于当你想打印一个集合时必须做的事情),但我想知道是否还有其他更简单的方法这样做,就像我说的,一些预定义的标准功能/程序?

4

2 回答 2

3

如果您的集合是 1、2、4 或 8 字节,则可以使用最近引入的 popcnt 内在函数。

此内在函数在系统中,但仅在主干(2.7.1)中

function PopCnt(Const AValue: Byte): Byte;[internproc:fpc_in_popcnt_x];
function PopCnt(Const AValue: Word): Word;[internproc:fpc_in_popcnt_x];
function PopCnt(Const AValue : DWord): DWord;[internproc:fpc_in_popcnt_x];
function PopCnt(Const AValue : QWord): QWord;[internproc:fpc_in_popcnt_x];

原因可能必须更多地寻求加速加密/压缩算法,而不是经典集合。

于 2012-10-17T20:56:48.017 回答
2

不是标准帕斯卡,不是。许多实现有一个非标准的添加;例如,GNU Pascal 具有以下功能Card(“cardinality”的缩写):http ://www.gnu-pascal.de/gpc/Card.html#Card 。

编辑我看到这被标记为 Free Pascal,并且根据这个页面,它缺少这样的添加。您必须循环增加一个计数器的集合。至少您只需要遍历集合中实际的元素,而不是遍历所有可能性并检查每个可能性是否存在......

于 2012-10-17T13:16:32.933 回答