Question: How can I pad out a vector with 0's if it is not a multiple of 8 bytes? 
In the following code I work out the offset and add to the vector to make sure it always has 8 values. I would like to pad this out with 0's and I am wondering what is the most efficient way to do this.

For example:

Input: **4444** 

With padding: **4444000000000000**

The code I have so far is:

```
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;
  }
}

```

Answer: 
**UPDATE:** One-liner (original more readable version below):

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

```

---

Here's the code that should be quite efficient. It avoids multiple re-allocations and does nothing if no padding is needed.

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

```

Here's a [live-example](https://wandbox.org/permlink/w07MfEILfaK4jiRq)

---

Note: Originally the post suggested `reserve` + `insert`, but `resize` will do the same in a less verbose way.
How about:

```
constexpr std::size_t ceil_to_multiple(std::size_t n, std::size_t mul)
{
    return (n + mul - 1) / mul * mul;
}

```

and then

```
vector1.resize(ceil_to_multiple(vector1.size(), 8), 0);

```