Вы должны использовать std::vector<unsigned char>
или std::vector<uint8_t>
(если у вас современный заголовок stdint.h
). Нет ничего плохого в использовании unsigned char[]
или uint8_t[]
, если вы работаете с буферами фиксированного размера. Когда std::vector
действительно сияет, это когда вам нужно часто расти или добавлять свои буферы. Итераторы STL имеют ту же семантику, что и указатели, поэтому алгоритмы STL будут одинаково хорошо работать с std::vector
и простыми старыми массивами.
И, как указал CAdaker, выражение &v[0]
гарантированно даст вам основной указатель на буфер вектора (и он гарантированно будет одним непрерывным блоком памяти). Эта гарантия была добавлена в дополнение к стандарту C ++.
Лично я бы не использовал std::string
для манипулирования произвольными байтовыми буферами, так как я думаю, что это может сбить с толку, но это не неслыханная практика.