CodeNebula
C++98stlbeginner

std::istreambuf_iterator

C++98 · The Foundation · Compiler flag: -std=c++98

Explanation

Reads characters directly from an input stream buffer.

Real-World Scenario

Process raw input in a text parser.

Quick Snippet

snippet.cpp
std::istreambuf_iterator<char> it(std::cin);

Full Example

istreambuf_iterator.cpp
// CodeNebula - C++98 Example: istreambuf_iterator
// Compile: g++ -std=c++98 -Wall -Wextra -o example istreambuf_iterator.cpp

#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
#include <algorithm>

int main() {
    // istreambuf_iterator reads characters one by one from a streambuf
    // Unlike istream_iterator, it does NOT skip whitespace
    std::istringstream iss("Hello World!\nLine two.");

    // Read all characters including spaces and newlines
    std::istreambuf_iterator<char> begin(iss);
    std::istreambuf_iterator<char> end;

    std::string content(begin, end);
    std::cout << "Read (preserving whitespace): [" << content << "]" << std::endl;

    // Count specific characters
    std::istringstream iss2("aabbbcccc");
    int count = std::count(std::istreambuf_iterator<char>(iss2),
                           std::istreambuf_iterator<char>(),
                           'c');
    std::cout << "Number of 'c' chars: " << count << std::endl;

    // Compare two streams character by character
    std::istringstream s1("abc");
    std::istringstream s2("abc");
    bool equal = std::equal(std::istreambuf_iterator<char>(s1),
                            std::istreambuf_iterator<char>(),
                            std::istreambuf_iterator<char>(s2));
    std::cout << "Streams equal: " << (equal ? "yes" : "no") << std::endl;

    return 0;
}

// Expected output:
// Read (preserving whitespace): [Hello World!
// Line two.]
// Number of 'c' chars: 4
// Streams equal: yes
Run command
g++ -std=c++98 -Wall -Wextra -o example istreambuf_iterator.cpp