如果它不是8的倍数,则用0填充向量

Zeu*_*us7 4 c++ vector padding fmod c++11

如果不是8字节的倍数,我如何填充0的向量?在下面的代码中,我计算出偏移量并添加到向量中以确保它总是有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;
  }
}
Run Code Online (Sandbox Code Playgroud)

AMA*_*AMA 11

这是应该非常有效的代码.它避免了多次重新分配,如果不需要填充则不执行任何操作.

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

这是一个实例

更新:最初的帖子建议reserve+ insert,但resize会以不那么冗长的方式做同样的事情.


Bat*_*eba 7

琐事有什么不对

while (vector1.size() % 8){
    vector1.push_back(0);
}
Run Code Online (Sandbox Code Playgroud)

它将附加零,直到元素的数量是8的倍数?

考虑到你如何弥补规模,重新分配的可能性是一个红色的鲱鱼.

  • 自上一句以来上调非常贴切.摊销的持续push_back和大小的选择应该很好地结合在一起. (2认同)