![]() |
1
43
它会很好的工作。 实际上,您可以像对待任何其他动态分配的字符缓冲区一样对待它。你可以上下扫描寻找神奇的数字或图案。您可以就地对其进行部分解析。对于从套接字接收,您可以非常轻松地调整其大小以附加更多数据。 缺点是调整大小效率不高(谨慎地调整大小或预分配),从数组前端删除也将非常无效。例如,如果您需要频繁地从数据结构的前端一次弹出一个或两个字符,那么在此处理之前复制到deque可能是一种选择。这需要一个副本,而deque内存不是连续的,所以不能只传递一个指向C API的指针。 总之,在深入研究之前,先了解数据结构及其折衷,然而,我在一般实践中看到的通常是字符向量。 |
![]() |
2
8
std::string的最大问题是当前的标准不能保证其底层存储是连续的。然而,并没有已知的STL实现中字符串是不连续的,所以在实践中它可能不会失败。事实上,新的C++0x标准将通过强制std::string使用连续缓冲区(如std::vector)来解决这个问题。 另一个反对字符串的论点是,它的名称表明它包含一个字符串,而不是二进制缓冲区,这可能会给阅读代码的人造成混淆。 也就是说,我也推荐vector。 |
![]() |
3
7
一个“指针”,我昨天在一段代码中收到了一个尖锐的提示:当从二进制数据块创建字符串时,使用
|
![]() |
4
3
您当然应该使用一些char容器,但是您想要使用的容器取决于您的应用程序。
上面Doug讨论了存储字符的适当stl容器。您需要哪一个完全取决于您的用例。如果您只是持有一个迭代的数据块,而不需要任何特殊的查找、追加/删除或拼接需要,那么我更喜欢vector,它比std::string更清楚您的意图,许多库和函数都认为std::string持有以null结尾的c样式字符串。 |
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
![]() |
quantumwell · 将空向量放入std::map() 7 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 7 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 7 年前 |