Загрузка матрицы в двумерный вектор C++

Я новичок в использовании векторов в C++, моя цель - прочитать матрицу из текстового файла и сохранить их в двухмерном векторе. Мой код выглядит следующим образом:

#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main()
{
    std::ifstream in("input.txt");
    std::vector<std::vector<int> > v;

    if (in) {
        std::string line;

        while (std::getline(in, line)) {
            v.push_back(std::vector<int>());

            // Break down the row into column values
            std::stringstream split(line);
            int value;

            while (split >> value)
                v.back().push_back(value);
        }
    }

    for (int i = 0; i < v.size(); i++) {
        for (int j = 0; j < v[i].size(); j++)
            std::cout << v[i][j] << ' ';

        std::cout << '\n';
    }
}

сейчас для ввода скажем

10101010
01010101
10101011
01011010

Я получаю вывод

10101010
1010101
10101011
1011010

т.е. каждый раз, когда 0 встречается в начале строки, он опускается. Я считаю, что проблема заключается в утверждении while(split>>value), но я не знаю, как его лучше кодировать.

2 ответа

Решение

Кажется, что вы действительно хотите хранить биты, но каким-то образом пытались разобрать строку, содержащую, например, 10101010 в серию битов. Если вы знаете максимальное количество бит в строке, вы можете использовать bitset<N>, которые обеспечивают простую в использовании перегрузку для оператора >> который может непосредственно читать в чем-то вроде 10101010, Надеюсь, поможет.

int main()
{
    std::ifstream in("input.txt");
    std::vector<std::bitset<8> >v;

    if (in) {
        std::bitset<8> bits;
        while (in >> bits) {
            v.push_back(bits);
        }
    }

    for (int i = 0; i < v.size(); i++) {
        for (int j = 0; j < v[i].size(); j++)
            std::cout << v[i][j] << ' ';

        std::cout << '\n';
    }
}

Замещать

while (split >> value)
    v.back().push_back(value);

с

for(int x=0; x<line.size(); x++){
    v.back().push_back((int)line[x] - (int)'0'));
}

и удалите ваш поток строк полностью.

Другие вопросы по тегам