【发布时间】:2012-03-20 06:25:16
【问题描述】:
我只想使用 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
}
如果我使用 resize() 而不是 reserve() 就可以了。字符串有容量但不能用[]真正访问它是怎么回事?这不就是要保留()大小以便您可以访问它吗?
插件 作为对答案的回应,我想问 stl 的人,当 resize() 完全相同并且还初始化字符串时,为什么有人会使用 reserve() ?我不得不说我不太欣赏这种情况下的性能论点。除了reserve() 所做的之外,resize() 所做的所有事情就是它只是初始化我们知道无论如何总是好的缓冲区。我们可以在岛上投票 reserve() 吗?
【问题讨论】:
-
字节向量会更合适
-
std::vector 似乎也可以满足您的要求。使用 std::vector 的答案也是可以接受的答案吗?