gpt4 book ai didi

c++ - std::basic_string 构造函数如何预先知道要保留多少空间?

转载 作者:太空狗 更新时间:2023-10-29 19:48:40 26 4
gpt4 key购买 nike

std::basic_string 具有以下构造函数,它使用 s 指向的空终止字符串的内容初始化字符串:

std::basic_string(const CharT* s, const Allocator& alloc = Allocator());

但是构造函数如何预先知道在其内部缓冲区中为字符串保留多少空间?

我想到了两种方法:

1) 它可以先遍历整个以 null 结尾的字符串,直到找到第一个 NULL 字符,记住它遍历了多少个字符,并将其用作其内部缓冲区的容量并开始复制。

缺点:必须读取字符串两次,一次用于计算字符数,第二次用于复制字符串。

2) 它可以在其内部缓冲区中保留一个保守的数量,然后开始复制。如果它在缓冲区用完之前命中 NULL 字符,我们就可以了,否则我们需要保留更多空间(同样是保守数量),然后重复这些步骤。

缺点:如果字符串相当大,不断重新调整容量的开销可能会变得很明显。

那么,一个健全的 std::basic_string 实现是做什么的(或者这甚至在标准中有规定)?

最佳答案

常见的实现会遍历原始字符串来计算长度,然后分配那么多的空间。它需要遍历字符串两次,但这是一个快速操作,在某些情况下有硬件支持,甚至在操作没有硬件支持时,与单次内存分配相比,它可能便宜

关于c++ - std::basic_string 构造函数如何预先知道要保留多少空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19778226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com