我正在尝试决定是否应该为我的案例使用数组或向量,我将在下面描述:
考虑这种情况:您需要存储3种不同类型的元素:整数(这是1-4中表示输出的整数),布尔值(表示输出是真还是假)和第二个整数(范围0-3表示状态).可以创建的任何值的最大数量为72.
我实现这一目标的方法是创建3个单独的数组,当创建包含上述信息的对象时,这些数组将被填充.同样,当对象被销毁时,对象特定信息被删除.从应用程序执行开始到应用程序关闭(假设对象未被销毁),需要此信息.
由于很少在我的应用程序中创建这些对象中的72个(用例极不可能),我不确定它是否是智能的(就内存而言)从一开始就将这些全局数组初始化为72,或者使用矢量并使其随着对象的创建而增长.
所以,我的问题是,鉴于上述情况,在这种情况下使用数组或向量是否更好?
注意:要记住的一件事是我的数组的索引表示创建对象的特定顺序,使其成为跟踪元素的简单方法.即,三个数组中的任何一个的索引0处的信息是对象1等的信息...我能够保持这个相同的索引系统以便用向量进行参考吗?
我会使用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...
};
Run Code Online (Sandbox Code Playgroud)
如果您真的担心内存,可以使用位域将结构填充到单个字节中:
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
};
Run Code Online (Sandbox Code Playgroud)