首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STL Rope -何时何地使用

STL Rope -何时何地使用
EN

Stack Overflow用户
提问于 2010-05-13 19:43:52
回答 5查看 19.2K关注 0票数 39

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-13 19:46:44

Rope是一种可伸缩的字符串实现:它们是为将字符串作为一个整体进行有效操作而设计的。赋值、连接和子字符串等操作所需的时间几乎与字符串的长度无关。与C字符串不同的是,对于非常长的字符串,例如编辑缓冲区或邮件消息,ropes是一种合理的表示方式。

Advantage

  1. 更快的连接和涉及长字符串的子字符串操作。在10兆字节的绳子中间插入一个字符应该花费大约10s微秒的时间,即使保留了原始文件的副本,例如作为编辑历史的一部分。相比之下,对于传统的“平面”字符串表示,这大约需要一秒钟的时间。对于大多数应用程序来说,串联所需的时间可以看作是常量。在文本editor.
  2. Potentially中使用绳索来表示文件是非常合理的,因为它具有更好的空间性能。对绳索的细微修改可以与原始绳索共享记忆。blocks
  3. Assignment是以小块的形式分配的,通过简单的(可能是引用计数的)指针分配,大大减少了由大are引入的内存碎片问题。与引用计数的写入时复制实现不同,即使随后对其中一个副本进行了轻微修改,这在很大程度上也是正确的。对字符串的旧版本设置检查点是非常便宜的,例如在编辑历史记录中。
  4. 可以将生成字符的函数视为一条线。因此,一段绳子可以是100M字节的文件,只有在检查该部分字符串时才会读取该文件。将字符串连接到此类文件的末尾不涉及读取该文件。(目前该工具的实现是incomplete.)

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

票数 43
EN

Stack Overflow用户

发布于 2010-05-13 19:46:12

它是处理大数据量的string的非标准替代方案。有关其工作原理,请参阅here

票数 8
EN

Stack Overflow用户

发布于 2011-03-24 09:30:05

ropes唯一不好的地方就是线程和滥用。

在Linux (可能还有大多数其他OSes)下,据说线程安全代码是导致ropes变得如此慢的原因。因此,我只是删除了这些代码(为线程关闭设置了一个编译器定义),因为我在嵌入式平台中使用了单个线程。

否则,ropes比字符串快得多,在大缓冲区中不太可能出现内存不足的情况,而且编辑大缓冲区的速度也快得多;比如删除圣经中间的坏字符。

这是由于绳索被解释为数据的方式所致。作为许多较小的“字符串”通过链表链接在一起,以产生最终的字符串。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2826431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档