Array vs Vector用于应用程序的运行时

时间:2015-05-28 14:23:32

标签: c++ arrays vector

我正在尝试决定是否应该为我的案例使用数组或向量,我将在下面介绍:

考虑这种情况:你需要存储3种不同类型的元素:一个整数(这是1-4中表示输出的整数),一个布尔值(这表示输出是真还是假),以及第二个整数(范围0-3表示状态)。可以创建的任何这些值的最大数量为72。

我实现这一目标的方法是创建3个单独的数组,这些数组在创建包含上述信息的对象时被填充。同样,当对象被销毁时,对象特定信息被删除。从应用程序执行开始到应用程序关闭(假设对象未被销毁),需要此信息。

由于我的应用程序中很少有72个这样的对象被创建(用例极不可能),我不确定它是否是智能的(就内存而言)将这些全局数组初始化为72开始,或使用向量,并在创建对象时使其增长。

所以,我的问题是,鉴于上述情况,在这种情况下使用数组或向量是否更好?

注意:要记住的一件事是我的数组的索引表示创建对象的特定顺序,使其成为跟踪元素的简单方法。即,三个数组中任何一个的索引0处的信息是对象1等的信息......我是否能够保持这个相同的索引系统以便用向量进行参考?

2 个答案:

答案 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)

这两个选项都有效。 数组的唯一之处在于您需要跟踪数组填充有效条目的距离,其中您可以询问向量的大小。