Думаю, я бы использовал deque<char>
.Интерфейс тот же, что и у vector
, и вектор будет работать, но вектор должен копировать все данные каждый раз, когда добавление превышает его существующую емкость.Рост экспоненциальный, но вы все равно ожидаете около log N
перераспределений, где N
- это количество блоков данных одинакового размера, которые вы добавляете.Deque не перераспределяет, поэтому он является предпочтительным контейнером в тех случаях, когда вектор должен был перераспределяться несколько раз.данные достаточно просты:
mydeque.insert(mydeque.end(), buf, buf + len);
Чтобы получить строку в конце, если вам нужна:
std::string mystring(mydeque.begin(), mydeque.end());
Я не совсем уверен, что вы подразумеваете под seek
,но, очевидно, deque
может быть доступен по индексу или итератору, так же как и vector
.
Другая возможность, однако, заключается в том, что если вы ожидаете длину содержимого в начале загрузки, вы можете использоватьvector
и reserve()
достаточно места для данных перед началом, что позволяет избежать перераспределения.Это зависит от того, какие HTTP-запросы вы делаете, и к каким серверам, поскольку некоторые HTTP-ответы будут использовать кусочную кодировку и не будут указывать размер заранее.