void * vs c ++中的vector <uint8_t> </uint8_t>

时间:2013-08-09 17:14:24

标签: c++ arrays vector void

当处理无符号数据类型时,我需要有一个容纳uint8uint16uint32uint64类型的通用容器。 拥有void*并投射上述数据类型对我有帮助,仍然用vector<uint8_t>替换它们使代码看起来更干净。

void* test = (uint32_t) 100;

VS

按字母方式将相同的内容推送到矢量测试;

这将是一个更好,更清洁的解决方案。

PS:由于模块的限制,我无法使用提升。

2 个答案:

答案 0 :(得分:1)

您可以使用union来存储和访问数据。这将允许联盟的所有成员占用相同的内存,您可以访问相应的数据类型而无需进行强制转换。

union UintData
{
    uint8_t  v8;
    uint16_t v16;
    uint32_t v32;
    uint64_t v64;
};

std::vector<UintData> data;
UintData test;
test.v32 = 0xffffffff;
data.push_back(data);

访问数据时,请确保只访问当前活动的成员(最后一个成员集),否则行为未定义。

答案 1 :(得分:0)

union可能是解决方案,但我想知道在推送uint8_t,uint16_t,uint32_t和uint64_t之后联合向量的大小是什么......?

我很有趣的简单解决方案,所以我会尝试

std::vector<uint64_t>

这种情况下,您可以插入所有值。