string :: insert会产生运行时错误

时间:2017-07-25 19:58:34

标签: c++

我有一个字符串b,我想要反转它,然后将结果附加到字符串a。我试过这个,但它给了我一个运行时错误

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;

    }

我在Ubuntu 16.0.4上使用GCC 5.4.0

1 个答案:

答案 0 :(得分:-3)

您正在使用的“插入”不起作用,因为:

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

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

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