С помощью векторов можно предположить, что элементы хранятся смежно в памяти, позволяя использовать диапазон [& vec [0], & vec [vec.capacity()) как обычный массив. Например.
vector<char> buf;
buf.reserve(N);
int M = read(fd, &buf[0], N);
Но теперь вектор не знает, что он содержит M байтов данных, добавленных извне с помощью read(). Я знаю, что vector:: resize() устанавливает размер, но он также очищает данные, поэтому его нельзя использовать для обновления размера после вызова read().
Существует ли тривиальный способ чтения данных непосредственно в векторы и обновления размера после? Да, я знаю об очевидных обходных решениях, таких как использование небольшого массива в качестве временного буфера чтения и использование vector:: insert() для добавления этого конца в конец вектора:
char tmp[N];
int M = read(fd, tmp, N);
buf.insert(buf.end(), tmp, tmp + M)
Это работает (и это то, что я делаю сегодня), но меня просто беспокоит, что там есть дополнительная операция копирования, которая не потребовалась бы, если бы я мог поместить данные непосредственно в вектор.
Итак, есть ли простой способ изменить размер вектора, когда данные были добавлены извне?