如果 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将以较少的冗长方式执行相同的操作。

09-07 07:11