Ada是否存在与Pascal的set类型等价的类型?
Ada中对应Pascal内置位集合的类型
你没遗漏——Ada标准库提供了Ada.Containers.Bit_Sets,完全对应Pascal那种按位存储、每个元素占1位的Set类型。
- 它的内存效率和Pascal的Set一致:比如存储ASCII字符集合时,只需要256位(32字节)就能覆盖所有可能的字符。
- 基础用法示例:
with Ada.Containers.Bit_Sets; use Ada.Containers.Bit_Sets; with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; procedure Char_Set_Demo is -- 范围对应ASCII字符的ASCII码值(1-256) ASCII_Set : Bit_Set (1 .. 256); begin -- 将字符'A'(ASCII码65)加入集合 Set (ASCII_Set, Character'Pos('A')); -- 检查是否包含字符'B' if Is_Set (ASCII_Set, Character'Pos('B')) then -- 执行操作 null; end if; -- 清空整个集合 Clear (ASCII_Set); end Char_Set_Demo; - 如果想更直观地用字符作为操作对象,可以自己封装一层,把
Character'Pos和Character'Val的转换逻辑封装起来,使用起来就和Pascal的set of char几乎一样。
你之前接触的Ada.Containers.Hashed_Sets这类容器,是哈希表实现的集合,适合元素范围大、元素分布稀疏的场景,和位集合的设计目标完全不同,内存占用自然高很多。
内容的提问来源于stack exchange,提问作者k314159
相关产品推荐
相关产品推荐

