如果 vector 不是8字节的倍数,如何填充0的 vector ?
在下面的代码中,我计算出偏移量并将其添加到 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
将以较少的冗长方式执行相同的操作。