|
|
1
27
文件 SGI C++ implementation 详细介绍了大O行为与恒定因素,这是很有启发性的。 涉及很长的字符串 ,为供参考而提出的例子 10 MB字符串 . 很少有程序会被编写来处理这样的事情,而且对于许多类这样的问题,需要对它们进行修改 基于流的 而不是要求在可能的情况下提供完整的字符串,这将导致显著优越的结果。因此,当您能够适当地将rope视为部分(本身就是rope)而不仅仅是一个字符序列时,rope用于对多兆字节字符序列进行非流操作。 重要优点:
重要缺点:
在某些情况下,字符串中特定于域的行为可以与对Rope实现的相对简单的增强相结合,以允许:
|
|
|
2
12
这个问题的简短答案是肯定的,这不需要什么解释。当然,在某些情况下,Rope数据结构比字符串生成器更有效。它们的工作方式不同,因此更适合不同的用途。 (从C#的角度)
如果您查看的是5-1000个字符的字符串,那么它的性能可能不会得到足够的提高。这是数据结构的另一个例子,它是为5%的处于极端情况的人设计的。 |
|
|
3
12
10th ICFP Programming Contest 依靠
因此,StringBuilder非常适合通过添加片段来构建字符串——这是一个非常正常的用例。由于开发人员经常需要这样做,StringBuilder是一种非常主流的技术。
你需要大量的数据和搅动才能让绳子得到回报——处理器非常擅长流操作,如果你有RAM,那么简单的realloc前缀就可以在正常的用例中工作。上面提到的那场比赛是我唯一一次看到它需要的。 |
|
|
4
1
通常,StringBuilder针对附加进行了优化,并尝试最小化 重新分配的总数 没有过多的分配。典型的保证是(log2n分配,小于内存的2.5x)。通常,字符串只构建一次,然后可以在不修改的情况下使用很长一段时间。 Rope针对频繁插入和移除进行了优化,并尝试将 |
|
|
5
1
Javascript虚拟机通常使用绳子来表示字符串。 Higgs Javascript虚拟机开发人员Maxime Chevalier Boisvert, says :
|