![]() |
STL
Решено
|
.::.DIMA.::., дабы многократно не перечитывать файл, его содержимое можно загрузить в память и работать с ней.
В примере про функцию fread() по ссылке в теме Бинарные файлы как раз так и поступили. |
В зависимости от идеи можно поступить по-разному.
Допустим матрица хранится в виде упорядоченного списка ненулевых элементов: {row, col, value} тогда наша задача пробежать 2 файла и записать 3-й файл с ненулевым результатом в таком же упорядоченном виде. Используем алгоритм merge Код:
struct cell_t |
Итератор - это заменитель указателя в с++. Он даёт универсальное представление указателя на элемент контейнера для шаблонов перебора в с++. Пример шаблона копирования:
Код:
template<typename InputIterator, typename OutputIterator> OutputIterator - предназначен для вывода в поток, во всех алгоритмах используются только конструции *iterator=..., и ++iterator или iterator++; (кстати, если компилятор будет ругаться при сборке на operator++() или operator++(int), надо его добавить, пустой) InputIterator - для ввода с потока ...=*iterator и ++iterator или iterator++. При этом понимается, что значение надо брать и присваивать один раз. для OutputIterator и InputIterator как правило явный конструктор без параметра строит итератор конца потока. ForwardIterator - позволяет чтение, запись, оператор ++ (например для стека) BidirectionalIterator - позволяет чтение, запись, операторы ++,-- (например для списка) RandomAccessIterator - позволяет всё, что можно делать с указателем Попробуем раскрыть шаблон copy с классом merge&: Код:
// merge merge1 |
Время: 15:21. |
Время: 15:21.
© OSzone.net 2001-