STL绳索 - 何时何地使用

Kon*_*rad 32 c++ stl ropes

我想知道在什么情况下你会在另一个STL容器上使用绳索?

Amb*_*ber 40

Ropes是一种可扩展的字符串实现:它们设计用于涉及字符串整体的高效操作.赋值,连接和子字符串等操作需要的时间几乎与字符串的长度无关.与C字符串不同,绳索是非常长的字符串(例如编辑缓冲区或邮件消息)的合理表示.

优点:

  1. 更快的连接和子串操作涉及长字符串.在10兆字节绳索的中间插入一个字符应该大约10微秒,即使保留了原始副本,例如作为编辑历史的一部分.相反,对于传统的"扁平"字符串表示,这将花费大约一秒的时间.对于大多数应用程序,连接所需的时间可以视为常量.使用绳索作为文本编辑器中文件的表示是完全合理的.

  2. 空间性能可能要好得多.绳索的微小修改可以与原始共享记忆.绳索以小块分配,显着减少了大块引入​​的内存碎片问题

  3. 赋值只是一个(可能是引用计数)指针赋值.与引用计数的写时复制实现不同,即使随后稍微修改了其中一个副本,这仍然很大程度上是正确的.检查字符串的旧版本是非常便宜的,例如在编辑历史中.

  4. 可以查看将字符生成为绳索的函数.因此,一条绳索可以是100MByte文件,只有在检查该字符串的该部分时才能读取该文件.将字符串连接到此类文件的末尾不涉及读取文件.(目前该设施的实施尚不完整.)

https://wayback.archive.org/web/20130102093702/https://www.sgi.com/tech/stl/Rope.html


Mar*_*tos 7

它是string处理大数据大小的非标准替代方案.请看这里的工作原理.