gpt4 book ai didi

c++ - 用 0's if it' 填充 vector 而不是 8 的倍数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:29 27 4
gpt4 key购买 nike

如果 vector 不是 8 字节的倍数,我如何用 0 填充它?在下面的代码中,我计算出偏移量并将其添加到 vector 中以确保它始终具有 8 个值。我想用 0 来填充它,我想知道最有效的方法是什么。

例如:

输入:4444

带填充:4444000000000000

我目前的代码是:

if ((vector1.size() % 8) != 0)
{
for (std::vector<unsigned char>::iterator itr = vector1.begin(); itr != vector1.end(); itr ++)
{
vector1.push_back(fmod(vector1.size(), 8));

if(vector1.size() == 8)
break;
}
}

最佳答案

更新:一行(下面是更具可读性的原始版本):

vec.resize(vec.size() + (8 - vec.size() % 8) % 8, 0);

这是应该非常高效的代码。它避免了多次重新分配,并且如果不需要填充则什么也不做。

const size_t nonPaddedSize = vec.size();
const size_t numPaddingElements = (8 - nonPaddedSize % 8) % 8;
if(numPaddingElements > 0)
vec.resize(nonPaddedSize + numPaddingElements, 0);

这是一个 live-example


注意:帖子最初建议使用 reserve + insert,但 resize 会以更简洁的方式执行相同的操作。

关于c++ - 用 0's if it' 填充 vector 而不是 8 的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46406410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com