作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我不确定这个问题是否有意义,所以我将尝试展示一个例子:
想象一下,我在内存位置 &s
处有一个字符串(未以空值终止),在内存位置 z
处有另一个字符串(以空值终止)。
char s[4]; s[0] = 'a'; s[1] = 'a'; s[2] = 'a'; s[3] = 'a';
char *z = malloc(sizeof(char) * 4);
z[0] = 'a'; z[1] = 'a'; z[2] = 'a'; z[3] = '\0';
char *y = malloc(sizeof(char) * 4);
y[0] = 'a'; y[1] = 'a'; y[2] = 'a'; y[3] = '\0';
有没有办法表示字符串 u
,即 s
和 z
与另一个字符串 的串联v
,这是 s
和 y
的串联,而无需重复 s
?
我知道它在阅读时不会很快,但它肯定会节省更多内存,尤其是在预期的重复次数方面。由于 s
的值可能会分别从 z
和 y
更改,并且更改应该出现在 z
和 v
,如果可能的话,不克隆 s
肯定会更有效率。
最佳答案
您想要的(或者我认为您想要的)结构的标准名称是 rope - 它就像具有统一界面的复合字符串序列。
This other question关于绳索有一些关于它们的讨论,以及 SGI 扩展的链接。
如果您选择现有的实现,请检查子字符串的可变性是否按照您想要的方式工作 - 有些可能会改为实现写时复制。
关于c++ - 在 C++ 中有没有办法从不同的内存位置打印 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608643/
我是一名优秀的程序员,十分优秀!