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会以不那么冗长的方式做同样的事情.
琐事有什么不对
while (vector1.size() % 8){
vector1.push_back(0);
}
Run Code Online (Sandbox Code Playgroud)
它将附加零,直到元素的数量是8的倍数?
考虑到你如何弥补规模,重新分配的可能性是一个红色的鲱鱼.