Несмотря на то, что вы можете безопасно читать нужное количество данных из базового хранилища, запись может оказаться плохой идеей, в зависимости от конструкции.
vlad:Code ⧴ cat vectortest.cpp
#include <vector>
#include <iostream>
int main()
{
using namespace std;
vector<char> v(2);
v.reserve(10);
char c[6]={ 'H', 'e', 'l', 'l', 'o', '\0' };
cout << "Original size is " << v.size();
memcpy( v.data(), c, 6);
cout << ", after memcpy it is " << v.size();
copy(c, c+6, v.begin());
cout << ", and after copy it is " << v.size() << endl;
cout << "Arr: " << c << endl;
cout << "Vec: ";
for (auto i = v.begin(); i!=v.end(); ++i) cout << *i;
cout << endl;
}
vlad:Code ⧴ make vectortest
make: `vectortest' is up to date.
vlad:Code ⧴ ./vectortest
Original size is 2, after memcpy it is 2, and after copy it is 2
Arr: Hello
Vec: He
vlad:Code ⧴
Так что, если вы пишете мимоsize()
, тогда новые данные не доступны для методов класса.
Вы можете учесть это и убедиться, что размер достаточно (например, vector<char> v(10)
), но вы действительно хотите создавать программное обеспечение там, где вы находитесь?борьба со стандартной библиотекой?