Не могу создать std :: string из одного из двух источников с одинаковыми типами - PullRequest
1 голос
/ 22 августа 2011

Почему последняя строка не работает?

ostringstream stream;
int f = 12345;
stream << f;
string st = stream.str();
cout << typeid(st.rbegin()).name() << endl;
cout << typeid(stream.str().rbegin()).name() << endl;
cout << string(st.rbegin(), st.rend()) << std::endl;
cout << string(stream.str().rbegin(), stream.str().rend()) << endl;

ir говорит: "Итераторы строк несовместимы", но вводит одинаковые.

Ответы [ 2 ]

6 голосов
/ 22 августа 2011

Вызов метода ostringstream::str() создает новый строковый объект, поэтому вы используете итераторы из двух разных объектов.

Для решения проблемы сохраните строку во временной переменной:

string temp = stream.str();
cout << string(temp.rbegin(), temp.rend()) << endl;

Что вы и делали с переменной st.

3 голосов
/ 22 августа 2011

str возвращает строку по значению, что означает, что два вызова stream.str() не будут ссылаться на одну и ту же строку в памяти.И поэтому итераторы из них не будут совместимы.

...