我正在尝试决定是否应该为我的案例使用数组或向量,我将在下面介绍:
考虑这种情况:你需要存储3种不同类型的元素:一个整数(这是1-4中表示输出的整数),一个布尔值(这表示输出是真还是假),以及第二个整数(范围0-3表示状态)。可以创建的任何这些值的最大数量为72。
我实现这一目标的方法是创建3个单独的数组,这些数组在创建包含上述信息的对象时被填充。同样,当对象被销毁时,对象特定信息被删除。从应用程序执行开始到应用程序关闭(假设对象未被销毁),需要此信息。
由于我的应用程序中很少有72个这样的对象被创建(用例极不可能),我不确定它是否是智能的(就内存而言)将这些全局数组初始化为72开始,或使用向量,并在创建对象时使其增长。
所以,我的问题是,鉴于上述情况,在这种情况下使用数组或向量是否更好?
注意:要记住的一件事是我的数组的索引表示创建对象的特定顺序,使其成为跟踪元素的简单方法。即,三个数组中任何一个的索引0处的信息是对象1等的信息......我是否能够保持这个相同的索引系统以便用向量进行参考?
答案 0 :(得分:6)
我会使用std::vector,因为它们会跟踪您包含的项目数量。我还会使用72
方法为所有reserve()
项预分配足够的内容,以防止多次分配。
此外,我会使用您的struct
值制作3
,并
struct item
{
int output; // could use std::int8_t to reduce memory
bool valid;
int state; // same here
// (or even use bitfields for all 3 values)
};
// ...
int main()
{
std::vector<item> items;
items.reserve(72); // preallocate enough for all items if you like
// ... etc...
};
如果您真的担心内存,可以使用bitfields将结构填充到一个字节中:
struct item
{
unsigned char output: 2; // 0-3 (need to add 1 to get 1-4)
unsigned char valid: 1;
unsigned char state: 2; // 0-3
};
答案 1 :(得分:0)
这两个选项都有效。 数组的唯一之处在于您需要跟踪数组填充有效条目的距离,其中您可以询问向量的大小。