2017-07-25 79 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後,我沒有更多的錯誤。 –

相關問題