2017-07-25 54 views
-3

我有一个字符串b,我想将其反转,然后将结果附加到字符串a中。我试过,但它给了我一个运行时错误string :: insert产生运行时错误

a.insert(a.end(), b.rbegin(), b.rend()) 

这是

terminate called after throwing an instance of 'std::length_error' 
    what(): basic_string::_M_create 

什么是与我行代码的问题?

更新:这里是抛出同样的异常很短的程序:

#include <iostream> 
#include <string> 


using namespace std; 


    int main (int argc, const char* argv[]) { 
     string result="bbb"; 
     string tail="aaa"; 
     result.insert(result.end(), tail.rend(), tail.rbegin()); 
     cout << result << endl; 
     return 0; 

    } 

我使用GCC 5.4.0在Ubuntu 16.0.4

+3

你可以使用更多一点的代码。 A [mcve],也许? – NathanOliver

+0

[它应该工作](http://coliru.stacked-crooked.com/a/850c06f746a0efdd) – Borgleader

+0

@Borgleader我知道,但我的完整示例也失败了,这有点让人放心! –

回答

-3

“插入”你正在使用没有按不起作用,因为:

在pos指向的元素之前插入[first,last)范围内的字符。如果InputIt不满足InputIterator,则此重载不参与重载解析。 (自C++ 11以来)

无法获得有效位置的begin()。对于这种情况,您可以使用append代替:

a.append(b.rbegin(),b.rend());

+0

以这种方式使用insert没有任何问题,除了要复制的范围向后传递的事实。特别是,在'end()'插入工作得很好;它相当于'append'。 –

+0

是的,抱歉,在按照正确的顺序放置了rend和rbegin后,我没有更多的错误。 –

相关问题