Есть файл со строками разной длины. Слова в котором, разделены запятыми. Нужно считать эти слова в двумерный вектор.
Написал такой код, но при исполнении, вектор остаеться пустым
vector<vector<string> > features;
string str, item;
int i = 0;
while(file)
{
getline(file, str);
stringstream ss(str);
while(getline(ss, item, ','))
features[i].push_back(item);
i++;
}
Подскажите в чем проблема.
когда Вы обращаетесь вот так features[i].push_back(item);, то Вы обращаетесь к несуществующему элементу. То, что вектор остался пустым - просто повезло. А могло и упасть или ещё что то.
То есть, как минимум, нужно переписать так
vector<vector<string> > features;
string str, item;
int i = 0;
while(file)
{
features.push_back(vector<string>()); // это ключевая строка
getline(file, str);
stringstream ss(str);
while(getline(ss, item, ','))
features[i].push_back(item);
i++;
}
Забудьте про while(file) - оно сработает только после неудачного чтения.
Примерно так:
vector<vector<string>> features;
string str, item;
while(getline(file, str))
{
stringstream ss(str);
vector<string> vs;
while(getline(ss, item, ','))
vs.push_back(item);
if (vs.size()) features.push_back(vs);
}
Вы добавляете новый вектор со словами в features только по факту, если что-то считано.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники