【问题标题】:The difference between adding a char to a string vs a string to char将 char 添加到字符串与将字符串添加到 char 之间的区别
【发布时间】:2020-08-17 05:30:00
【问题描述】:

两者之间的性能差异是什么:

string s="";
//stk is std::stack<char>
 while(!stk.empty()){
            s+=stk.top();
            stk.pop();
        }            
        reverse(s.begin(),s.end());

 while(!stk.empty()){
            s=stk.top()+s;
            stk.pop();
        }            

为什么上面的效率更高?如有需要可以举个例子。

LeetCode problem

【问题讨论】:

  • 当您测量时,性能差异是什么?
  • 我正在解决一个关于 leetcode 的问题。在使用第二种方法时,我得到了一个 TLE。当我使用第一个时,它已解决。编辑:它在逻辑上是正确的,仅在大输入时失败。
  • 这也可能是因为这两个东西没有给出相同的结果?
  • 这些代码是不同的。他们不做同样的事情。你可能想抹去这个问题,因为在这一点上,考虑到这两段代码做的事情完全不同,这没有多大意义。
  • 实际上它在一个循环中,我正在从堆栈中获取我的字符。在我的循环结束时,我反转了字符串。所以,逻辑上是一样的。字符串从空白开始

标签: c++ string performance stl


【解决方案1】:

s+=stk.top(),在这种情况下等同于s.push_back(stk.top()),具有摊销常数时间复杂度。 s=stk.top()+s,本质上等价于s.insert(s.begin(), 1, stk.top()),在s的长度上是线性的。

【讨论】:

  • 更糟糕的是,因为 s=stk.top()+s 必须创建 2 个全新的副本(一个要插入,然后 1 个在分配中),而 s+=stk.top() 不需要。
  • stk.top()+s 产生一个右值,并且由于 C++11 s=stk.top()+s 将执行移动赋值。只会创建 1 个副本。
猜你喜欢
  • 2022-01-10
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
相关资源
最近更新 更多