C++ 避免获得子字符串?

C++ 避免获得子字符串?,c++,string,C++,String,我有一种情况,我有一个std::string,我只需要字符x到x+y,我想如果我能以某种方式执行(char*)和string[x],它会大大加快速度,但问题是我所有的函数都希望使用以空结尾的字符串 我能做什么 谢谢使用: string.c_str() + x; 这假设函数采用const char* 如果需要实际的0端接,则必须复制。使用: string.c_str() + x; 这假设函数采用const char* 如果需要实际的0-终止,则必须进行复制。无任何内容(如果需要的字符串位于中间

我有一种情况,我有一个std::string,我只需要字符x到x+y,我想如果我能以某种方式执行(char*)和string[x],它会大大加快速度,但问题是我所有的函数都希望使用以空结尾的字符串

我能做什么

谢谢

使用:

string.c_str() + x;
这假设函数采用
const char*

如果需要实际的0端接,则必须复制。

使用:

string.c_str() + x;
这假设函数采用
const char*


如果需要实际的0-终止,则必须进行复制。

无任何内容(如果需要的字符串位于中间)。速度差将是微不足道的,除非它被做了很多(几百万)

什么都没有(如果你需要的字符串在中间)。速度差将是微不足道的,除非它被做了很多(几百万)

没有什么好事可以做。我能想到的唯一技巧是将
s[x+y+1]
临时设置为0,传递
&s[x]
,然后恢复角色。但是,只有当您确信这将合理地提高性能并且这一提升是必要的时,您才应该求助于此

没有什么好办法。我能想到的唯一技巧是将
s[x+y+1]
临时设置为0,传递
&s[x]
,然后恢复角色。但是,只有当您确信这将合理地提高性能并且这一提升是必要的时,您才应该求助于此

您别无选择。如果不复制或修改原始字符串,则无法创建以null结尾的子字符串


你说你“认为它会加速”。你量过了吗?

你别无选择。如果不复制或修改原始字符串,则无法创建以null结尾的子字符串


你说你“认为它会加速”。您测量了吗?

您可以用NUL覆盖
&string[x+y+1]
,并将
&string[x]
传递给您的函数。如果以后需要再次使用整个字符串,可以将其保存一段时间,并在需要时恢复。

可以使用NUL覆盖
&string[x+y+1]
,并将
&string[x]
传递给函数。如果以后需要再次使用整个字符串,可以保存整个字符串,并在需要时进行恢复。

您是否进行过分析,以确保创建子字符串是应用程序的一个主要性能问题?请问,为什么每个人都试图优化STL?这是编译器的工作。我有一个低预算的戴尔,核心是i7。SiSoft Sandra报告内存带宽为17GB/s。复制子字符串需要多长时间?您是否进行过任何分析,以确保创建子字符串是应用程序的主要性能问题?请问,为什么每个人都在尝试优化STL?这是编译器的工作。我有一个低预算的戴尔,核心是i7。SiSoft Sandra报告内存带宽为17GB/s。复制子字符串需要多长时间?