相关疑难解决方法(0)

c ++使用move而不是copy进行累积

我有以下代码

auto adder = [](string& s1, const string& s2)->string&&
   {
      if (!s1.empty())
         s1 += " ";
      s1 += s2;
      return move(s1);
   };

   string test;
   test.reserve(wordArray.size() * 10);
   string words = accumulate(wordArray.begin(), wordArray.end(), 
       move(test), adder);
Run Code Online (Sandbox Code Playgroud)

我想在这里避免字符串复制.不幸的是,这并没有通过vs2012的accumulate实现来实现.内部累积调用另一个函数_Accumulate并且rvalue功能在此过程中丢失.

我改为调用_Accumulate函数

string words = _Accumulate(wordArray.begin(), wordArray.end(), 
    move(test), adder);
Run Code Online (Sandbox Code Playgroud)

我获得了预期的性能提升.

是否必须重写std库以考虑rvalue参数?

还有其他方法我可以使用积累来完成我想要的而不会作弊太多吗?

c++ visual-c++

12
推荐指数
1
解决办法
727
查看次数

标签 统计

c++ ×1

visual-c++ ×1