C++ 在C++;有没有办法从不同的内存位置打印字符*?

C++ 在C++;有没有办法从不同的内存位置打印字符*?,c++,C++,我不确定这个问题是否有太多的意义,因此我将尝试展示一个示例: 假设我在内存位置&s(非空终止)有一个字符串,在内存位置z(空终止)有另一个字符串 有没有一种方法可以表示字符串u,即s和z与另一个字符串v的串联,即s和y的串联,而不必重复s 我知道它的阅读速度不会很快,但它肯定会节省更多的内存,尤其是预期的重复次数。由于s的值可能与z和y分开变化,并且变化应该出现在z和v中,如果可能的话,不克隆s肯定会更有效 做你想做的事没有标准的方法。您必须创建自己的类来表示这些字符串。可能它会包含类似于向量的

我不确定这个问题是否有太多的意义,因此我将尝试展示一个示例:

假设我在内存位置
&s
(非空终止)有一个字符串,在内存位置
z
(空终止)有另一个字符串

有没有一种方法可以表示字符串
u
,即
s
z
与另一个字符串
v
的串联,即
s
y
的串联,而不必重复
s


我知道它的阅读速度不会很快,但它肯定会节省更多的内存,尤其是预期的重复次数。由于
s
的值可能与
z
y
分开变化,并且变化应该出现在
z
v
中,如果可能的话,不克隆
s
肯定会更有效

做你想做的事没有标准的方法。您必须创建自己的类来表示这些字符串。可能它会包含类似于
向量的内容
来表示字符串所包含的数据块。

您的问题的标题意味着您要打印这个连接的字符串。如果这是唯一的用例,您可以使用and
iovec
。其概念是,您可以在一个命令中从多个数据源批量写入文件描述符。只需使用
writev
并写入
stdout

您想要(或我认为您想要)的结构的标准名称是a-它就像一个具有统一接口的字符串复合序列

关于rope有一些关于它们的讨论,并有一个到SGI扩展的链接


如果您选择现有的实现,请检查子字符串的可变性是否按照您想要的方式工作-有些可能会改为实现写时复制。

是的,但您必须创建自己的类来管理字符串中的这些
跳转
。您是否为嵌入式系统制作此程序,如果不是,然后忘记内存UAG.BTW,<代码> MaloC/比C++更C…这不是嵌入系统,但给出100000次重复,在内存上相当浪费。在不存储这些字符串的情况下,我使用了大约70MB的RAM,而存储这些字符串的内存更接近270MB。@RahulManne:
new[]
(在
std::unique\u ptr
中拥有)、
std::vector
std::array
std::string
中拥有)。但这不容易阅读,对吗?我不能在向量上使用printf。同时,这可能是最好的解决方法。@RahulManne如果你真的关心可读性,并且字符串不是很长,那么你应该真的进行复制,避免不必要的复杂性。这方面有一个完美的标准和文档化的数据结构,它只是不包括在STL中。@RahulManne你的意思是什么级别的?对于外部代码,它将是完全可读的-它将使用您自己的
MultiPartString
类,该类将有一个很好的接口(因为您将为它提供一个很好的接口)。在这个类中,这个漂亮的接口将指导实现,使它更容易理解。同样,trie也可以在常见前缀的情况下工作(如果我理解正确的话,就像这里)。再想一想,trie可能不是最好的解决方案:它通常用于将字符串用作键(访问实际值所必需的)。我收回之前的评论:)
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';