stringstream str(line, ios_base::in);
while(!str.eof()){
string word;
str >> word;
std::transform(word.begin(), word.end(), word.begin(), ::tolower);
char c = *(--word.end());
char b = *word.begin();
if((c == ')' && b == '(') || (c == '\'' && b == '\'')){
word.erase(--word.end());
word.erase(word.begin()); //exception occurs here
}
c = *(--word.end());
if(c == ',' || c == '.' || c == '?' || c == '!')
word.erase(--word.end());
}
このコードは、word.erase(word.begin()); で std::length_error (what(): basic_string::_S_create) をスローします。ただし、それを word.erase(0, 1); に変更すると それは完全に正常に動作します。
何故ですか?
gcc 4.8.1 (MinGW ビルド) を使用しています