Идея в порядке. Проблема не в том, что clear
не работает, а в том, что вы неправильно печатаете вектор.
buffer.data()
возвращает указатель на данные, другими словами, char*
. Когда вы используете std::cout
для char*
, он ожидает завершенную нулем строку (т. Е. Строку стиля C), но вы этого не даете, поскольку в ваших данных нет нулевого символа, поэтому вы получите непредсказуемые результаты.
Вот некоторый код, который печатает вектор правильно (используя std::copy
и std::ostreambuf_iterator
)
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<char> buffer;
buffer.push_back('2');
buffer.push_back('5');
buffer.push_back('6');
std::copy(buffer.begin(), buffer.end(), std::ostreambuf_iterator(std::cout));
std::cout << std::endl;
buffer.clear();
buffer.push_back('3');
std::copy(buffer.begin(), buffer.end(), std::ostreambuf_iterator(std::cout));
std::cout << std::endl;
return 0;
}