istream работает с буферным классом, поэтому он обычно будет читать довольно большими кусками (хотя точный размер не гарантируется). Таким образом, вы, вероятно, уже получаете эффект, который вы ищете. Если вы обрабатываете буферизацию самостоятельно, это несколько нетривиально - когда вы достигаете конца буфера, есть вероятность, что вы окажетесь в середине слова, поэтому вам придется скопировать текущее слово начало вашего буфера и прочитайте больше, чтобы заполнить оставшуюся часть буфера, прежде чем вы сможете обработать это слово.
Скорее всего, вы должны просто использовать исправленный цикл, например:
while (in>>word) {
// process word
}
... но вы могли бы немного улучшить скорость, читая файл прямо в потоке строк и обрабатывая слова оттуда:
std::istream in;
std::istringstream buffer;
buffer << in.rdbuf();
while (buffer >> word) {
// process word
}
Это может быть вредно для действительно большого входного файла.