Как читать из файла и хранить при этом часть прочитанного в памяти?

Стоит такая задача. Есть большой файл, его надо прочитать посимвольно. При этом, надо постоянно держать в памяти последние несколько прочитанных символов.

#include <fstream>
#include <vector>
using std::vector, std::ios, std::ifstream;

int main() {
    ifstream fIle;
    fIle.open("myfile.bin", ios::in|ios::binary);
    char ch;
    vector<char> chm(8);
    while(fIle.get(ch)) {
        // и тут я запутался
    }

Вот как наиболее адекватно реализовать такое? Читать кусками по 8 байт - нельзя! Надо читать строго по байту и при этом держать последние 8 прочитанных байт, в т ч только что прочитанный, в памяти...


Ответы (2 шт):

Автор решения: Harry

Ну читайте как в циклический буфер...

for(int k = 0; fIle.get(chm[k]); k = (k+1)%8) 
{
    // Тут делайте, что хотите :) 
    // i-й символ (считая с 1; только что введенный - 8-й)
    // находится в chm[(k+i)%8]
}
→ Ссылка
Автор решения: RandomDice 779

Нашёл более интуитивно понятный ответ:

#include <fstream>
#include <vector>
using std::vector, std::ios, std::ifstream;

int main() {
    ifstream fIle;
    fIle.open("myfile.bin", ios::in|ios::binary);
    char ch;
    vector<char> chm(8);
    for (unsigned int k=0; k < chm.size(); k++) {
        chm[k] = ' '; // инициализируем пустой вектор
    }
    while(fIle.get(ch)) {
        for (unsigned int j=7; j > 0; j--) {
            chm[j-1] = chm[j]; // сдвигаем символы
        }
        chm[7] = ch;
    }
→ Ссылка