Основной проблемой является строка ss >> num
. Сначала мы начнем с 1,2,3,4,5
в потоке. getline(ss, substr, '\n')
читает первое число из потока (1
) и избавляется от разделителя ,
. Затем ss >> num
читает следующее число (2
), но сохраняет следующее ,
в потоке, потому что отформатированный оператор >>
считывает только столько символов, которые допустимы для типа, в который он читается. Таким образом, вы выбросили 1
, который был сохранен внутри substr
, и вставили 2
в вектор.
Таким образом, поток в этой точке равен ,3,4,5
во второй итерации l oop. getline
читает пустую строку в substr
(потому что перед ,
нет номера) и избавляется от разделителя ,
, а ss >> num
читает 3
. Это повторяется до тех пор, пока весь поток не будет прочитан: getline
постоянно читает пустую строку и ss >> num
читает целое число.
Решение состоит в том, чтобы избавиться от строки ss >> num
и преобразовать substr
в целое число с std::stoi
. Кроме того, для корректности необходимо ввести операцию ввода в состояние while
l oop. Таким образом, l oop вводится после проверки успешности операции ввода.
std::string substr;
while (getline(ss, substr, ',')) {
my.push_back(std::stoi(substr));
}