Этот код в порядке. Разница между resize
и reserve
заключается в том, что resize
изменяет значение, возвращаемое size
(и фактически создает новые инициализированные объекты по умолчанию), тогда как reserve
нет (оно только выделяет больше памяти).
В зависимости от того, как вы обрабатываете данные, вы можете оставить второй resize
и сделать это с помощью цикла, подобного следующему:
for (vector<unsigned char>::iterator it = buffer.begin();
it != buffer.begin() + nbytes;
it++)
{
// process each byte
}
Таким образом, вы можете просто прочитать фактически записанные данные и игнорировать все остальное. Это означает, что вы устанавливаете размер вектора только один раз, а затем никогда не меняете его. В общем, если вы работаете только с итераторами, нет необходимости изменять размер вектора, поскольку допустимый диапазон данных всегда будет [buffer.begin(), buffer.begin() + nbytes)
.