Почему я получаю ошибку векторного индекса вне диапазона для моего кода?

Почему я получаю сообщение об ошибке «индекс вектора вне допустимого диапазона» для своего кода?

class CSVRow
{
public:
    string const& operator[](size_t index) const
    {
        return m_data[index];
    }
    size_t size() const
    {
        return m_data.size();
    }
    void readNextRow(istream& str)
    {
        string line;
        getline(str, line);

        stringstream lineStream(line);
        string cell;

        m_data.clear();
        while (getline(lineStream, cell, ','))
        {
            m_data.push_back(cell);
        }
    }
private:
    vector<string> m_data;
}
;

istream& operator>>(istream& str, CSVRow& data)
{
    data.readNextRow(str);
    return str;

}
int main()
{
    ifstream file("full_training_dataset.csv");

    CSVRow row;
    while (file >> row)
        cout << row[1] << endl;


    return 0;
}

person Alsphere    schedule 03.12.2015    source источник
comment
Какова структура загружаемого CSV-файла?   -  person Michiel Pater    schedule 03.12.2015
comment
После прочтения первой строки в векторе есть только одна строка с индексом 0. Доступ к элементу 1 этого вектора через ваш оператор [] является доступом за пределы.   -  person M Oehm    schedule 03.12.2015
comment
На самом деле, я хочу прочитать второй столбец моего full_training_dataset.csv, чтобы я дал строку [1], а не строку [0], мой CSV-файл содержит два столбца строк   -  person Alsphere    schedule 03.12.2015
comment
Вы должны проверить size() перед доступом к ячейке с определенным индексом.   -  person M Oehm    schedule 03.12.2015
comment
Почему я получаю сообщение об ошибке, когда индекс вектора выходит за пределы допустимого диапазона для моего кода? -- Потому что, может быть... вы обращаетесь к вектору с индексом вне допустимого диапазона? В чем еще может быть причина? Среда выполнения говорит правду, поэтому ваша задача — отлаживать код. Кроме того, почему вы предполагаете, что есть row[1] для доступа?   -  person PaulMcKenzie    schedule 03.12.2015
comment
@ PaulMcKenzie, потому что я пытаюсь прочитать второй столбец моих строковых данных csv   -  person Alsphere    schedule 03.12.2015
comment
@Ahmed При запуске программы второго столбца нет. Есть второй столбец, когда вы смотрите на файл человеческими глазами, но в вашей программе есть ошибка, которая не соответствует тому, что вы видите. Итак, еще раз, причина ошибки точно такая же, как указано - ваш индекс вектора вне допустимого диапазона.   -  person PaulMcKenzie    schedule 03.12.2015
comment
@PaulMcKenzie, так что же сделать, чтобы мой вектор попал в мой диапазон??   -  person Alsphere    schedule 03.12.2015
comment
@Ahmed Вы делаете это в пределах досягаемости, исправляя свою программу. Вы неверно читаете данные, и вам нужно это исправить. Никто не знает, что вы читаете, пока мы не увидим данные. Кроме того, это не имеет значения — ваш код всегда должен следить за тем, чтобы индекс был в границах — что, если в следующий раз у вас будет файл, содержащий только 1 столбец? Ваша цель должна состоять в том, чтобы сделать программу максимально надежной, а не делать предположения на основе данных.   -  person PaulMcKenzie    schedule 03.12.2015
comment
@PaulMcKenzie, в первом столбце моего файла есть списки положительных или отрицательных слов, а во втором столбце есть команды для твитов, у меня есть 21604 строки этих данных и два столбца.   -  person Alsphere    schedule 03.12.2015
comment
@Ahmed Описание недостаточно хорошее. Ваш код неправильно читает файл. У вас может быть миллион столбцов, если в коде есть ошибка, которая не может читать дальше первой, что хорошего в описании?   -  person PaulMcKenzie    schedule 04.12.2015


Ответы (1)


person    schedule
comment
На самом деле, я хочу прочитать второй столбец моего full_training_dataset.csv, чтобы я дал строку [1], а не строку [0] - person Alsphere; 03.12.2015