我想使用std :: string简单地创建一个动态缓冲区,而不是使用索引迭代它.resize()是实际分配缓冲区的唯一函数吗?
我尝试了reserve()但是当我尝试通过索引访问字符串时它断言.此外,当字符串的默认容量似乎是15个字节(在我的情况下),但如果我仍然无法访问它my_string[1].
所以字符串的容量不是实际的缓冲区?reserve()也没有分配实际的缓冲区?
string my_string;
// I want my string to have 20 bytes long buffer
my_string.reserve( 20 );
int i = 0;
for ( parsing_something_else_loop )
{
char ch = <business_logic>;
// store the character in
my_string[i++] = ch; // this crashes
}
Run Code Online (Sandbox Code Playgroud)
如果我做resize()而不是reserve()比它工作正常.字符串是如何容量但却无法使用[]真正访问它?是不是要保留()大小以便你可以访问它?
附加组件 为了回答这些问题,我想问一下stl人们,为什么有人会在resize()完全相同的情况下使用reserve()并且还会初始化字符串?我不得不说我不太欣赏这种情况下的表现论点.所有resize()除了reserve()之外还做了更多的事情,它只是初始化缓冲区,我们知道它总是很好.我们可以在岛上投票保留()吗?