2015-11-27 6 views
0

Это моя проблема, мне нужно прочитать из текстового файла определенную матрицу междунар, не зная размер егоC++ прочитать матрицу UNKOWN размера

Пусть, например:

«matrix.dsv "

1,0,1,0,0,0,1,0
0,1,1,1,1,1,1,1
0,0,0,0,0 , 0,0,0
0,0,0,1,0,0,0,0

Есть ли способ узнать размер матрицы, не импортируя ее?

Поскольку я буду выбирать другой способ его запоминания (вектор, разреженная матрица, полная матрица) в зависимости от разреженности, есть ли способ подсчета ненулевых элементов?

Большое спасибо (извините за хромой вопрос, я совершенно новой для управления файлами!)

EDIT: Спасибо coincoin! Последний вопрос, как cin реагирует на конец строки? Или лучше, как я увеличиваю один из индексов, когда заканчиваю строку? Thanks;)

ответ

0

К сожалению, для того, чтобы узнать размер матрицы, вам необходимо прочитать файл, если у вас нет информации в поле имени файла или в начале файла.

Вопрос немного широк.
std::vector должно быть возможным, так как вы можете динамически добавлять элементы с push_back() для разреженного или плотного хранилища. Предпочитают сплюснутое линейное (одномерное) хранилище.
Обработка файла должна быть за один проход, вы читаете элемент за элементом, проверяете и добавляете счетчик, если он равен нулю.
При достижении конца файла и знании размера вашей матрицы вы можете изменить данные.

Если вы можете попытаться использовать известные библиотеки для удобных классов и методов Matrix, таких как Eigen, Armadillo, если вы выполняете линейную алгебру.

Смежные вопросы