Вы можете изменить свой код для анализа строки, используя getline
, например:
std::stringstream istrs("1 2 3 4 5 6");
std::vector<int> vec;
string temp;
while(getline(istrs,temp, ' '))
{
vec.push_back(stoi(temp));
}
for(auto a : vec)
std::cout << a << " ";
std::cout << std::endl;
Я не вижу необходимости в другом потоке строки, а затем преобразовании.
Вчтобы понять, почему то, что вы упомянули, терпит неудачу, обратитесь к документации stringstream и к get .Мы имеем дело с шестой перегрузкой подписи type basic_istream& get( basic_streambuf& strbuf, char_type delim );
читает символы и вставляет их в выходную последовательность, управляемую данным basic_streambuf
Вы сохраняете это какint, попробуйте объявить temp
как string
, получить строку, используя оператор потока o >> temp
, и выполнить преобразование в int, используя stoi
.Вы найдете преобразование, которое вам удастся в первый раз, а не другие, скорее всего, программа потерпит крах.Причина в том, что после 1 вы не извлекаете никаких символов и удовлетворяете условию:
следующий доступный входной символ c равен delim, как определено в Traits :: eq (c, delim).Этот символ не извлекается.
В этом случае
Если символы не были извлечены, вызовы устанавливают (failbit).
В вашемЦикл while, если вы установите !istrs.eof() && istrs.good()
, вы увидите, что программа корректно завершится, но у вас будет только одно значение.