升级的好处¶
整数集合的升级策略有两个好处, 一个是提升整数集合的灵活性, 另一个是尽可能地节约内存。
提升灵活性¶
因为 C 语言是静态类型语言, 为了避免类型错误, 我们通常不会将两种不同类型的值放在同一个数据结构里面。
比如说,
我们一般只使用 int16_t
类型的数组来保存 int16_t
类型的值,
只使用 int32_t
类型的数组来保存 int32_t
类型的值,
诸如此类。
但是,
因为整数集合可以通过自动升级底层数组来适应新元素,
所以我们可以随意地将 int16_t
、 int32_t
或者 int64_t
类型的整数添加到集合中,
而不必担心出现类型错误,
这种做法非常灵活。
节约内存¶
当然,
要让一个数组可以同时保存 int16_t
、 int32_t
、 int64_t
三种类型的值,
最简单的做法就是直接使用 int64_t
类型的数组作为整数集合的底层实现。
不过这样一来,
即使添加到整数集合里面的都是 int16_t
类型或者 int32_t
类型的值,
数组都需要使用 int64_t
类型的空间去保存它们,
从而出现浪费内存的情况。
而整数集合现在的做法既可以让集合能同时保存三种不同类型的值, 又可以确保升级操作只会在有需要的时候进行, 这可以尽量节省内存。
比如说,
如果我们一直只向整数集合添加 int16_t
类型的值,
那么整数集合的底层实现就会一直是 int16_t
类型的数组,
只有在我们要将 int32_t
类型或者 int64_t
类型的值添加到集合时,
程序才会对数组进行升级。