c# - 我可以在不分配的情况下实现线性(或接近)复杂的字符串连接吗?

标签 c# c++ string

{
   std::string s = "this is a string ";
   std::string res = std::string();
   int sLength = s.length();
   for(int i = 0; i < sLength; i++)
      res += s[i];
}

我认为这个 C++ 的复杂度是严格线性的(关于字符分配),而不是 C# 中的等价物的二次复杂度。

然而,事实上,在这种情况下,内存没有预先分配,我们实际上也在考虑二次复杂度吗?如果是,分配 char 数组会帮助我们实现线性复杂度吗?

最佳答案

您可以通过调用 std::string::reserve 来实现线性复杂度。这将防止随着字符串的增长而重新分配:

std::string s = "this is a string ";
std::string res = "what is this? ";
res.reserve(s.length() + res.length());

for(int i = 0; i < s.length(); i++)
   res += s[i];

显然,您不会在现实生活中像这样连接字符串。

关于c# - 我可以在不分配的情况下实现线性(或接近)复杂的字符串连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30399553/

相关文章:

c++ - C++ 中集合/容器的接口(interface)/父类(super class)

C++:使用子字符串创建新字符串

c# - 将 CSV 文件读取到嵌套对象

c# - 带有子查询和别名的 NHibernate QueryOver

c# - 系统.Net.Sockets.Socketexception : An invalid argument was supplied Error Code:10022

c - 两个 scanf 函数,但其​​中一个读取不同的值

r - 如何在 gsub 模式中使用数字列表作为变量输入?

c# - 执行多个线程的最有效方法

c++ - 计算文件中的 react 数

c++ - 如何检测某些可调用对象是否采用右值引用?