C++ Iterator Library - istreambuf_iterator
Description
It is a special input iterator that read successive elements from a stream buffer.
Declaration
Following is the declaration for std::istreambuf_iterator.
C++11
template <class charT, class traits = char_traits<charT> > class istreambuf_iterator;
Parameters
charT − It is a char type.
traits − It is a character traits.
Return value
none
Exceptions
If x somehow throws while applying the unary operator& to it, this function never throws exceptions.
Time complexity
constant for random-access iterators.
Example
The following example shows the usage of std::istreambuf_iterator.
#include <vector>
#include <sstream>
#include <iostream>
#include <iterator>
int main() {
std::istringstream in("Hello, world");
std::vector<char> v( (std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>() );
std::cout << "v has " << v.size() << " bytes. ";
v.push_back('\0');
std::cout << "it holds \"" << &v[0] << "\"\n";
std::istringstream s("abc");
std::istreambuf_iterator<char> i1(s), i2(s);
std::cout << "i1 returns " << *i1 << '\n'
<< "i2 returns " << *i2 << '\n';
++i1;
std::cout << "after incrementing i1, but not i2\n"
<< "i1 returns " << *i1 << '\n'
<< "i2 returns " << *i2 << '\n';
++i2;
std::cout << "after incrementing i2, but not i1\n"
<< "i1 returns " << *i1 << '\n'
<< "i2 returns " << *i2 << '\n';
}
Let us compile and run the above program, this will produce the following result −
v has 12 bytes. it holds "Hello, world" i1 returns a i2 returns a after incrementing i1, but not i2 i1 returns b i2 returns a after incrementing i2, but not i1 i1 returns b i2 returns c
iterator.htm
Advertisements