C++ 迭代器庫 - istreambuf_iterator



描述

它是一個特殊的輸入迭代器,用於從流緩衝區讀取連續的元素。

宣告

以下是 std::istreambuf_iterator 的宣告。

C++11

template <class charT, class traits = char_traits<charT> >
  class istreambuf_iterator;

引數

  • charT − 它是一個字元型別。

  • traits − 它是一個字元特性。

返回值

異常

如果在對 x 應用一元運算子 & 時,x 以某種方式丟擲異常,則此函式永遠不會丟擲異常。

時間複雜度

對於隨機訪問迭代器,時間複雜度為常數。

示例

以下示例演示了 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';
 
}

讓我們編譯並執行上述程式,這將產生以下結果:

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
廣告